2017-11-08 8 views
0

私は2 .pyファイルを持っています。なぜ、別のモジュールに属する変数に値を書き込めないのですか?

ファイルa.py

some_boolean = True 

ファイルb.py

from a import * 
def blah(): 
    if some_boolean: 
     do_something() 
    some_boolean = not some_boolean 

コードがsome_boolean = not some_boolean行せずに完全に正常に動作しますが、できるだけ早く私は戻って私でそれを追加するとUnboundLocalError: local variable 'some_boolean' referenced before assignmentを取得しています。

私は何時間も頭を打つことができました。私はそれを理解できないようです。何か案は?

答えて

1

あなたはaの資格のインポートを行うとフルネームa.some_boolean使用する必要があります。私に新しいローカル変数を作成しようとsome_boolean = not some_booleanあなたのコードを

import a 

def blah(): 
    if a.some_boolean: 
     do_something() 
    a.some_boolean = not a.some_boolean 

を。 some_booleanという名前がローカル変数に使用され、同じ名前のグローバル変数がシャドウされるため、これは機能しません。 一般に、ローカル変数とグローバル変数には同じ名前を使用しないでください。

+0

グローバル名をシャドーするよりも、「global」キーワードもこの問題を解決します。 –

+1

'global'は使わないでください。 ;)しかし、 'a'の値は変更されません。 OPは 'a.some_boolean'をプログラム全体で利用できるように思えます。 –

関連する問題