TIL

Today I Learned. 知ったこと、学んだことを書いていく

UnboundLocalError: local variable '変数名' referenced before assignment ってエラー

以下のようなコードを実行した場合エラーが出てしまう

>>> hoge = False
>>> def foo():
...     hoge = False if hoge else True
...     print(hoge)
...
>>> foo()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 2, in foo
UnboundLocalError: local variable 'hoge' referenced before assignment

上記のコードではfoo内でhogeがローカル変数として認識してしまうため、hogeが初期化されていないのに使用しているためエラーになってしまった

対策

hogeがローカル変数ではなく、グローバル変数であることを教えてあげればいい

globalキーワードを使用する

>>> hoge = False
>>> def foo():
...     global hoge
...     hoge = False if hoge else True
...     print(hoge)
...
>>> foo()
True

参考文献

プログラミング FAQ - Python 3.6.1 ドキュメント