2010-06-08 81 views
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結構?什麼可能導致局部變量字典有時是空的?

+1

這聽起來像你的代碼中必須有一些非確定性。主題?網絡I/O?什麼? – 2010-06-08 22:41:37

+1

我同意奈德; tb_frame實際上是調用代碼的框架,如果變量不存在,那麼它不會被設置。那麼請注意,重新提出的異常會保留它們的tb對象,所以也許框架並未指向您認爲的範圍? – 2010-06-09 04:22:31

回答

0

什麼是在當地人是完全依賴於在該地方上下文中的代碼。例如:

if condition: 
    foo='foo' 
else: 
    bar='bar' 

如果condition==True然後foo將在locals()bar不會,否則bar將在locals()foo不會。