如何在Python中以编程方式检查异常的堆栈跟踪?

2024-04-25 14:04:40 发布

您现在位置:Python中文网/ 问答频道 /正文

当Python中发生异常时,可以检查堆栈吗?你能确定它的深度吗?我看过traceback模块,但我不知道如何使用它。

我的目标是捕获在解析eval表达式期间发生的任何异常,而不捕获它可能调用的任何函数引发的异常。不要因为我使用eval而责怪我。这不是我的决定。

注意:我想以编程的方式,而不是交互的方式。


Tags: 模块函数目标表达式堆栈编程eval方式
3条回答

traceback已经足够了——我认为文档描述得相当好。简化示例:

import sys
import traceback

try:
    eval('a')
except NameError:
    traceback.print_exc(file=sys.stdout)

我喜欢追踪模块。

您可以使用sys.exc_info()获取回溯对象。然后,可以使用该对象使用traceback.extract_tb()获取一个经过预处理的回溯条目列表。然后您可以使用traceback.format_list()获得一个可读列表,如下所示:

import sys
import traceback, inspect

try:
    f = open("nonExistant file",'r')
except:
    (exc_type, exc_value, exc_traceback) = sys.exc_info()
    #print exception type
    print exc_type
    tb_list = traceback.extract_tb(sys.exc_info()[2])
    tb_list = traceback.format_list(tb_list)
    for elt in tb_list:
        print elt
        #Do any processing you need here.

请参阅sys模块:http://docs.python.org/library/sys.html

回溯模块:http://docs.python.org/library/traceback.html

可以使用inspect模块,该模块具有一些用于跟踪的实用函数。看看frame对象的overview of properties

相关问题 更多 >