16.6.3 traceback中的局部变量
cgitb中的代码会检查栈帧中使用的导致错误的变量,这些代码足够聪明,还可以计算对象属性并显示。
import cgitb
cgitb.enable(format='text',context=12)
class BrokenClass:
"""This class has an error.
"""
def __init__(self,a,b):
"""Be careful passing arguments in here.
"""
self.a = a
self.b = b
self.c = self.a * self.b
# Really
# long
# comment
# goes
# here.
self.d = self.a / self.b
return
o = BrokenClass(1,0)
如果一个函数或方法包括大量内联注释、空白符或其他代码,使它篇幅很长,那么倘若只有默认的5行上下文,则可能无法提供足够的指示。如果将函数体从代码窗口取出,在屏幕上不再可见,那么就没有足够的上下文来了解出现错误的位置。可以对cgitb使用一个更大的上下文值来解决这个问题。向enable()传入一个整数作为上下文(context)参数,控制其为traceback的各行显示多少代码。
下面的输出显示,容易出错的代码与self.a和self.b有关。