2012-02-28 52 views
3

我是一個自學成才的程序員,沒有正規的訓練,所以請原諒我提前如果這是一個愚蠢的問題。蟒蛇 - 執行del語句早

雖然以Python進行編程,我發現一個很奇怪:

from someModule import someClass 

def someFunction(): 
    someInstance = someClass() 
    print "foo" 
    del someClass 

someFunction() 

這立即將未綁定的局部變量錯誤死亡:

UnboundLocalError: local variable 'someClass' referenced before assignment 

註釋掉delete語句解決了這個問題:

... 
    #del someClass 
... 

,並返回:

foo 

所以,2個問題:

1)del語句是在函數結束。爲什麼它在開始之前被調用?

2)爲什麼給我一個「綁定本地變量」的錯誤?它不應該是一個「未綁定的全局變量」錯誤?

+0

你應該不會被刪除someInstance而不是SomeClass的在這種情況下,因爲類是類定義和實例是你的這個類 – darren102 2012-02-28 22:40:03

+0

是的情況下,我的問題是理論多於實際......這是爲什麼語句中之前自帶的代碼之前評估? – learningKnight 2012-02-28 22:44:06

+0

這並不能解釋爲什麼'print'foo「'沒有執行。 – WolframH 2012-02-28 22:44:43

回答

8

del語句隱呈現名字someClass當地的整體功能,因此行

someInstance = someClass() 

嘗試查找本地名稱someClass,這是不是在這一點上定義。 del語句不提前執行 - 名稱沒有從頭開始定義。

如果你真的想這樣做(提示:你不這樣做),你必須聲明名稱global

def someFunction(): 
    global someClass 
    ... 
    del someClass 
+1

這回答了問題的第二部分,但不是第一部分。值得指出的是,錯誤是*語法錯誤*,發生在編譯時,而不是運行時。這就是爲什麼它似乎無序發生。 – 2012-02-28 22:46:34

+1

@讓PaulCalderone:我覺得這也回答了第一部分(特別是我的編輯後)。 – 2012-02-28 22:47:53

+2

@讓PaulCalderone:錯誤不是語法錯誤,和它發生在運行時。 – 2012-02-28 22:48:34