[解決済み] 関数内でグローバル変数に代入すると、"referred before assignment "というエラーが発生するのはなぜですか?
2023-03-27 13:21:27
質問
Pythonで、以下のようなエラーが発生します。
UnboundLocalError: local variable 'total' referenced before assignment
ファイルの最初(エラーの発生する関数の前)に
total
を使用しています。
global
というキーワードを使います。そして、プログラム本体で
total
を使用する関数が呼び出される前に、それを 0 に割り当てます。さまざまな場所 (ファイルの先頭、宣言された直後など) でそれを 0 に設定しようとしましたが、うまくいきません。
誰か私が間違っていることを見ましたか?
どのように解決するのですか?
グローバル」の使い方が間違っているのではないでしょうか。参照
Python リファレンス
. 変数の宣言はグローバル変数なしで行い、関数内部でグローバル変数にアクセスする場合は、次のように宣言します。
global yourvar
.
#!/usr/bin/python
total
def checkTotal():
global total
total = 0
この例を参照してください。
#!/usr/bin/env python
total = 0
def doA():
# not accessing global total
total = 10
def doB():
global total
total = total + 1
def checkTotal():
# global total - not required as global is required
# only for assignment - thanks for comment Greg
print total
def main():
doA()
doB()
checkTotal()
if __name__ == '__main__':
main()
なぜなら
doA()
は
グローバルな合計
を変更しないので、出力は 11 ではなく 1 になります。
関連
-
[解決済み] Pythonの構文に新しいステートメントを追加することはできますか?
-
[解決済み] PILからopenCVフォーマットへの変換
-
[解決済み] Spyderを仮想環境で動作させるには?
-
[解決済み] 辞書のキーと値を交換するにはどうすればよいですか?
-
[解決済み] Pythonのインスタンス変数とクラス変数
-
[解決済み] スペースがないテキストを単語のリストに分割する方法
-
[解決済み] Pythonでマルチプロセッシングキューを使うには?
-
[解決済み] PyQtアプリケーションのスレッド化。QtスレッドとPythonスレッドのどちらを使うか?
-
[解決済み] Pythonの文字列書式をリストで使う
-
[解決済み] 単純な文字列からtimedeltaオブジェクトを作成する方法
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】ローカル変数の初回使用後に再代入すると、UnboundLocalErrorが発生する。
-
[解決済み] DataFrameの文字列、dtypeがobjectの場合
-
[解決済み] 前月の日時オブジェクトを返す
-
[解決済み] Jupyterノートブックでenv変数を設定する方法
-
[解決済み] googletransがエラー 'NoneType' オブジェクトに 'group' 属性がない、と言って動かなくなった。
-
[解決済み] データフレームをソートした後にインデックスを更新する
-
[解決済み] PyMongoで.sortを使用する
-
[解決済み] Celeryタスクのユニットテストはどのように行うのですか?
-
[解決済み] 単純な文字列からtimedeltaオブジェクトを作成する方法
-
[解決済み] あるメソッドが複数の引数のうち1つの引数で呼び出されたことを保証する