2
在Python,我有一些代码捕获异常,例如:的Python:sys.exc_info()缺少局部变量
try:
<do stuff>
except:
exc_info = sys.exc_info()
我遇到的问题是,回溯对象(exc_info [ 2])在追踪对象中非确定性地缺少局部变量。我知道这是事实,因为我运行完全相同的代码,有时变量位于tb.tb_frame.f_locals中,有时不是。全局变量在tb.tb_frame.f_globals中总是正确的。
什么是填充f_locals结构?什么可能导致局部变量字典有时是空的?
这听起来像你的代码中必须有一些非确定性。主题?网络I/O?什么? – 2010-06-08 22:41:37
我同意奈德; tb_frame实际上是调用代码的框架,如果变量不存在,那么它不会被设置。那么请注意,重新提出的异常会保留它们的tb对象,所以也许框架并未指向您认为的范围? – 2010-06-09 04:22:31