2012-02-28 3 views
3

私は独学で訓練をしていない独学のプログラマーですので、これが愚かな質問であれば事前に私を許してください。これはすぐに結合していないローカル変数のエラーで死ぬpython-del文を早期に実行する

from someModule import someClass 

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

someFunction() 

は、Pythonでのプログラミングは私は奇妙な何か見つけながら

... 
    #del someClass 
... 

UnboundLocalError: local variable 'someClass' referenced before assignment 

delete文をコメントアウトする問題を修正します

返信:

foo 

ので、2つの質問:

1)デル・ステートメントは、関数の最後です。最初はビットの前に呼び出されているのはなぜですか?

2)なぜ私に「バインドされていないローカル変数」エラーが出るのですか? 「束縛されていないグローバル変数」エラーであってはなりませんか?

+0

、あなたが名前globalを宣言する必要がありますクラスはあなたのクラス定義であり、インスタンスはそのクラスのインスタンスです – darren102

+0

はい、私の質問は実際よりも理論的でした...なぜその前に来るコードの前にそのステートメントが評価されていますか? – learningKnight

+0

これは 'print" foo "'が実行されない理由を説明しません。 – WolframH

答えて

8

del文では、暗黙のうちに全体の関数の名前someClassは、ローカルレンダリングするので、ライン

someInstance = someClass() 

は、その時点で定義されていないローカル名someClassを、ルックアップするためにしようとします。 delステートメントは早期に実行されません。名前は最初から正しく定義されていません。

本当にこの(ヒント:あなたはない)のような何かをしたい場合は:あなたがいるので、この場合にsomeInstanceではなく、工assを削除すべきではない

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

これは質問の第2部分に答えますが、最初の部分には答えません。このエラーは*構文エラー*であり、実行時ではなくコンパイル時に発生します。だからこそ、それは順不同で起こっているようだ。 –

+1

@ Jean-PaulCalderone:これは最初の部分(特に私の編集後)にも答えると思います。 –

+2

@ Jean-PaulCalderone:エラーは構文エラーではなく、実行時に発生します。 –

関連する問題