16.6.2 启用详细的traceback
尽管基本traceback包括了足够多的信息来发现错误,不过启用cgitb将给出更多详细信息。cgitb将sys.excepthook替换为另一个函数,他能提供更丰富的traceback。
import cgitb
cgitb.enable(format='text')
def func2(a,divisor):
return a / divisor
def func1(a,b):
c = b - 5
return func2(a,c)
func1(1,5)
这个例子生成的错误报告比原先要丰富的多。会列出栈的每一帧,并提供以下信息:
源文件的完整路径,而不只是基名。
栈中各个函数的参数值。
错误路径中当前行周围的几行源代码上下文。
导致错误的表达式中的变量值。
由于能够访问错误栈中涉及的变量,这有助于程序员找到出现在栈中更高位置的逻辑错误,而不只是生成具体异常的那一行代码。
对于这个存在ZeroDivisionError异常的代码,显然是因为func1()中c值的计算带来的问题,而不是func2()中在哪里使用这个值。
输出的最后还包括了异常对象的完整细节(除了message以外可能还有其他属性,对调试会很有用),以及traceback转储的原始形式。