由于某种原因,堆栈中没有这样的框架。
例如,如果我在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。
有没有提取信息的方法?
答案 0 :(得分:0)
操作方法。我找到了一个解决方案(感谢检查模块及其工作人员):
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].