如何提取跟踪堆在那里功能直接抛出一个例外?

问题描述 投票:0回答:1

出于某种原因,存在在堆栈中没有这样的帧。

举例来说,如果我有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。

有没有方法来提取的信息?

python python-3.x exception-handling
1个回答
0
投票

怎么做。我找到了解决方案(感谢检查模块和工作的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].
© www.soinside.com 2019 - 2024. All rights reserved.