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

Nic*_*ack 18 python exception-handling stack-trace traceback

当Python中发生异常时,您可以检查堆栈吗?你能确定它的深度吗?我查看了traceback模块,但我无法弄清楚如何使用它.

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

注意:我想以编程方式而不是交互方式执行此操作.

Dmi*_*kin 14

traceback就足够了 - 我认为文档描述得相当好.简化示例:

import sys
import traceback

try:
    eval('a')
except NameError:
    traceback.print_exc(file=sys.stdout)
Run Code Online (Sandbox Code Playgroud)

  • 我不打算打印回溯.我正试图检查它.这是如何告诉我eval文本本身或评估文本调用的函数中是否发生了异常? (3认同)

And*_*Dog 6

您可以使用具有一些实用功能的inspect模块进行跟踪.查看框架对象属性概述.


ajo*_*jon 5

我喜欢回溯模块。

您可以使用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.
Run Code Online (Sandbox Code Playgroud)

查看 sys 模块:http : //docs.python.org/library/sys.html

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