我正在使用python中的pdb模块;我最近才发现它,所以我是一个初学者。我要做的是有一个变量,如果为True,将对脚本中发生的所有失败调用set_trace(),而不将其全部放入try/except语句中。例如,我希望以下功能不使用try/except:

from pdb import set_trace

debug = True
try:
    #entire script here

except Exception, e:
    if debug:
        set_trace()
    else:
        print e

有没有一种方法可以在不使用try-except语句的情况下实现这一点(也不必为每个可能失败的命令都使用if语句)?
谢谢。

最佳答案

你可以定制excepthook
当引发异常且未捕获异常时,解释器调用sys.excepthook
有三个参数,异常类、异常实例和回溯
对象

import sys
import pdb

debug = True

def excepthook(type_, value, traceback):
    if debug:
        pdb.set_trace()
    else:
        print(value)
        # Per mgilson's suggestion, to see the full traceback error message
        # sys.__excepthook__(type_, value, traceback)

sys.excepthook = excepthook

1 / 0

如果您希望在debugFalse时出现通常的回溯错误消息,则可以将上述内容简化为
if debug:
    sys.excepthook = lambda type_, value, traceback: pdb.set_trace()

10-06 07:49