16.5.2 检查栈
要检查当前栈,可从walk_stack()构造一个StackSummary。
import traceback
import sys
from traceback_example import call_function
def f():
summary = traceback.StackSummary.extract(
traceback.walk_stack(None)
)
print(''.join(summary.format()))
print('Calling f() directly:')
f()
print()
print('Calling f() from 3 levels deep:')
call_function(f)
format()方法生成一个可以打印的格式化字符串序列。
StackSummary是一个包含FrameSummary实例的可迭代容器。
import traceback
import sys
from traceback_example import call_function
template = (
'{fs.filename:<26}:{fs.lineno}:{fs.name}:\n'
' {fs.line}'
)
def f():
summary = traceback.StackSummary.extract(
traceback.walk_stack(None)
)
for fs in summary:
print(template.format(fs=fs))
print('Calling f() directly:')
f()
print()
print('Calling f() from 3 levels deep:')
call_function(f)
每个FrameSummary都描述了一个栈帧,包括程序源文件中执行上下文的位置。