2011-01-13 13 views
1

は、私は私の一つに今2つのグローバル変数、 グローバルSYNC_DATAと グローバルSYNC_TOTAL_SIZEpythonのグローバル変数のトラブル

を宣言しました関数では、グローバル変数SYNC_DATAを関数内で再びグローバルとして宣言することなく使用することができます。しかし、同じ方法で他のグローバル変数SYNC_TOTAL_SIZEを使用することはできません。私はそれを使用するには、関数内で後者をグローバルとして宣言しなければなりません。 "UnboundLocalError:ローカル変数 'SYNC_TOTAL_SIZE'が代入の前に参照されています。

グローバル変数に関数としてグローバルに宣言することなく時々グローバル変数にアクセスできるようになるのはなぜですか時々そうではありませんか? なぜ、最初に一度宣言されているときに関数内でグローバルとして宣言しなければならないのでしょうか?なぜ関数がグローバル名前空間内の変数を見つけられないのかそのネームスペースを直接?

答えて

6

SYNC_TOTAL_SIZEがローカル変数として宣言されていないと仮定します。グローバル変数をどのような操作で実行しているかによって異なりますが、グローバル変数を読み込むだけでグローバル変数として宣言する必要はありませんが、グローバル変数の値を変更する場合はglobalで宣言する必要があります。

+0

これはうまくいきました...私はその関数でSYNC_TOTAL_SIZEの値を変更していましたが、他の関数でSYNC_DATAを読み込んでいたので、グローバルとして宣言することなく許可しました。ありがとうございました。 –

0

SYNC_TOTAL_SIZEはおそらくそのコードのどこか他の場所で非グローバルとして使用されているため、Pythonはそれを見つけてグローバルではないと考えます。もう1つの理由は、ある機能でそれを読んでいるだけなので、global宣言は必要ありません(詳細はthis questionを参照してください)。正確な診断を行うには、問題を示す最小限のコードスニペットを投稿してください。

アドバイスは、それを意味するときに常にglobalと言います。