เมื่อเผชิญกับปัญหาที่คล้ายกันฉันพบว่าsys._current_frames ()จากโมดูล sys มีข้อมูลที่น่าสนใจที่สามารถช่วยคุณได้โดยไม่จำเป็นต้องนำเข้าการตรวจสอบอย่างน้อยก็ในกรณีการใช้งานเฉพาะ
>>> sys._current_frames()
{4052: <frame object at 0x03200C98>}
จากนั้นคุณสามารถ "เลื่อนขึ้น" โดยใช้ f_back:
>>> f = sys._current_frames().values()[0]
>>>
>>> print f.f_back.f_globals['__file__']
'/base/data/home/apps/apricot/1.6456165165151/caller.py'
>>> print f.f_back.f_globals['__name__']
'__main__'
สำหรับชื่อไฟล์คุณสามารถใช้ f.f_back.f_code.co_filename ได้ตามที่ Mark Roddy แนะนำไว้ข้างต้น ฉันไม่แน่ใจเกี่ยวกับขีด จำกัด และข้อควรระวังของวิธีนี้ (หลายเธรดน่าจะเป็นปัญหา) แต่ฉันตั้งใจจะใช้ในกรณีของฉัน
caller_name
ไม่สามารถเป็นได้__main__