2008-11-14 61 views
1

當A Python異常是由代碼跨多行,例如拋出:Python異常回溯告訴我行結束的位置,它從哪裏開始?

myfoos = [foo("bar", 
       "baz", 
       "quux", 
       i) for i in range(10)] 

Python將報告的最後一行的行號,並顯示從該行的代碼片斷:

Traceback (most recent call last): 
    File "test.py", line 4, in <module> 
    i) for i in range(10)] 
NameError: name 'foo' is not defined 

有什麼方法可以確定第一行是什麼?有什麼辦法來捕獲異常,並操縱traceback目的是能夠這樣,而不是報告的內容:/

Traceback (most recent call last): 
File "test.py", lines 1-4 in <module> 
    myfoos = [foo("bar", 
       "baz", 
       "quux", 
       i) for i in range(10)] 
NameError: name 'foo' is not defined 

回答

0

在try except塊可以除外NameError和嘗試設置NameError.lineno,雖然我」我不太確定這是否或如何工作,但這是我迄今發現的最好的。

try: 
    somecode 
except NameError 
    NameError.lineno = [1,4] 

你必須找出其中的語句開始和結束自己不知何故,以及其聲明提高了錯誤。

希望這會有幫助

+0

我問的部分是搞清楚聲明何時開始和結束。 – 2008-11-14 23:53:03

2

尋找行的開始將是非常困難的。你必須解析Python,或者挖掘編譯後的字節碼。標準庫中有用於解析Python的模塊,但我可以從經驗告訴你,解釋它們的輸出是黑色藝術。我不確定編譯的字節碼是否有答案...