[解決済み] pythonのグローバル変数の警告 [重複] [重複
質問
Python 2.6スクリプト(少なくとも2.7にアップグレードすべきなのは分かっています)は、以下のようなものです。
ret_code = 0
def some_func()
global ret_code
...
if __name__ == '__main__':
global ret_code
...
今、このコードを実行すると、警告が表示されます。 *SyntaxWarning: name 'ret_code' is assigned to before global declaration global ret_code* (構文警告:名前 'ret_code' はグローバル宣言の前に割り当てられています。
なぜこのような警告が出るのでしょうか?
することで解決できるのですが。
def some_func()
global ret_code
...
if __name__ == '__main__':
global ret_code
ret_code = 0 #assign 0 here instead of above
...
それでも私の質問の答えにはなっていない。元のコードのどこが問題なのでしょうか?
解決方法は?
この問題を解決するための最も直接的な方法は、以下のように
global
の下にある宣言
if __name__ == '__main__':
. そこでは必要ない。他のいくつかの言語とは異なり
if
そのブロックの中で代入された変数はグローバルなものであり、それは単に
if
があります。
これはまた、なぜエラーになるのかを説明します:変数を
global
の場合、以前にその変数名を同じスコープで使っていたことは許されません(おそらく、その変数名を使うと
global
ステートメントを使用して、代入を行うことができます。
以前
Pythonは同じ名前が同じスコープでグローバルとローカルの両方に存在することをサポートしていません)。そのため
if
は新しいスコープを導入しないので、最初の代入は
ret_code
の下にあるグローバル宣言と同じスコープになります。
if
しかし、グローバル宣言は代入よりも後に来るので、これは許されません。
さらに良い解決策としては、プログラムから変更可能なグローバルな状態を完全に取り除くことができないか考えてみてください。ここでは、おそらく
ret_code
をプログラムの終了コードとして使用します。
sys.exit(ret_code)
しかし、どの出口コードを使うかは、関数の中で決めています。その代わり、トップレベルのコードに十分な情報を渡し、その中から
それ
を使用して、どの終了コードを使用するかを決定します。
関連
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Pythonを使って簡単なzipファイルの解凍パスワードを手作業で解く
-
Pythonショートビデオクローラーチュートリアル
-
Pythonの画像ファイル処理用ライブラリ「Pillow」(グラフィックの詳細)
-
[解決済み] [Solved] sklearn error ValueError: 入力に NaN、infinity または dtype('float64') に対して大きすぎる値が含まれている。
-
[解決済み】ImportError: sklearn.cross_validation という名前のモジュールがない。
-
[解決済み】TypeError: re.findall()でバイトのようなオブジェクトに文字列パターンを使用することはできません。)
-
[解決済み】Python: SyntaxError: キーワードは式になり得ない
-
[解決済み】ImportError: bs4という名前のモジュールがない(BeautifulSoup)
-
[解決済み】ValueError: pickleプロトコルがサポートされていません。3、python2 pickleはpython3 pickleでダンプしたファイルを読み込むことができない?
-
[解決済み】NameError: 名前 'self' が定義されていません。