出于某种原因,存在在堆栈中没有这样的帧。
举例来说,如果我有foo.py一个简单的函数:
def foo(a):
if a < 0:
raise Exception('a must be > 0.')
做(从另一个文件detect.py):
try:
foo(-1)
except Exception as e:
error = traceback.extract_stack()
print(error)
其结果是:[<FrameSummary file detect.py, line 16 in <module>>]
然后,我们看到从那里发生异常当前文件的唯一FrameSummary,有没有什么地方发生异常(在foo.py)直接到位(在线内容和LINE_NO)FrameSummary。
有没有方法来提取的信息?
怎么做。我找到了解决方案(感谢检查模块和工作的IT人员):
import sys
import traceback
import inspect
from foo import foo
try:
foo(-1)
except Exception as e:
inner_frames = inspect.getinnerframes(e.__traceback__)
print('File names: {}.'.format([x.filename for x in inner_frames]))
print('Called in functions: {}.'.format([x.function for x in inner_frames]))
print('Line numbers: {}.'.format([x.lineno for x in inner_frames]))
...
File names: ['detect.py', '/home/sergzach/Dropbox/tests/exception_detect_module/foo.py'].
Called in functions: ['<module>', 'foo'].
Line numbers: [12, 4].