如何使用inspect从Python中的被调用者获取调用者的信息?

我需要从被调用者那里得到调用者信息(什么文件/什么行)。 我了解到,我可以使用模块来达到目的,但不完全如此。

如何检查这些信息? 或者有没有其他的方式来获取信息?

import inspect print __file__ c=inspect.currentframe() print c.f_lineno def hello(): print inspect.stack ?? what file called me in what line? hello() 

主叫方的帧比当前帧高一帧。 您可以使用inspect.currentframe().f_back来查找调用者的框架。 然后使用inspect.getframeinfo获取调用者的文件名和行号。

 import inspect def hello(): previous_frame = inspect.currentframe().f_back (filename, line_number, function_name, lines, index) = inspect.getframeinfo(previous_frame) return (filename, line_number, function_name, lines, index) print(hello()) # (<frame object at 0x8ba7254>, '/home/unutbu/pybin/test.py', 10, '<module>', ['hello()\n'], 0) 

我build议使用inspect.stack来代替:

 import inspect def hello(): frame,filename,line_number,function_name,lines,index = inspect.stack()[1] print(frame,filename,line_number,function_name,lines,index) hello() 

我发布了一个简单的堆栈帧地址检查封装器,用单个参数spos覆盖堆栈帧:

例如pysourceinfo.PySourceInfo.getCallerLinenumber(spos=1)

其中spos=0是lib函数, spos=1是调用者, spos=2是调用者的调用者等。

如果调用者是主文件,只需使用sys.argv [0]