6
當我在Python chatroom掛出來,有人在下降,報告了以下異常:如何「NameError:在封閉範圍內賦值之前引用的自由變量'var'出現在真實代碼中?
NameError: free variable 'var' referenced before assignment in enclosing scope
我以前從來沒有看到錯誤消息,並且用戶提供的只是一個小的代碼片段不能自己引起了錯誤,所以我一直在搜索信息,並且...似乎沒有太多。在我搜索時,用戶將他們的問題報告爲「空白問題」,然後離開房間。
了一下週圍打後,我只能夠重現例外玩具這樣的代碼:
def multiplier(n):
def multiply(x):
return x * n
del n
return multiply
這給了我:
>>> triple = multiplier(3)
>>> triple(5)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 3, in multiply
NameError: free variable 'n' referenced before assignment in enclosing scope
一切都很好,但我很難弄清楚這種異常會如何發生在野外,因爲我上面的例子是
- 很蠢
- 不太可能在事故
發生......但很顯然你,因爲我在這個問題開始提到的報告。
那麼 - 如何可以這個特定的異常發生在真實的代碼?
Somebody incompetent writes that code for real? – iCodez
這曾經是Python 2中的編譯時錯誤,看起來像是在Python 3中改變了。 –
@undefinedisnotafunction:它不是Python 2中的編譯時錯誤。它不能像編譯器不做的那樣花式靜態分析控制流量。 – BlackJack