はじめに
pythonでコードを書いている時にエラーが発生しました。
エラーは行数が多くなり、重複箇所が多くなり関数にまとめたりしている時に発生しました。
今回はそのエラーメッセージとその原因と対処方法についてのメモです。
エラーメッセージ&対処方法
エラーメッセージ
まず表示されたメッセージですが、
UnboundLocalError: local variable '****' referenced before assignment
というものでした。
エラーは
「UnboundLocalError:ローカル変数****は割当前に参照されました」
と言っています。
Unboundは「束縛されていない」または「関連付けられていない」という意味です。
今回のエラーでは「関連付けていない」の意味が妥当です。
原因と対処方法
このエラーが起きるのは「ローカル変数が参照される前に割り当てられていないとき」です。
具体例を簡単なソースコードで見てみようと思います。
次のソースコードはエラーが発生する場合です。
def foo():
print(x) # ここでエラーが発生
x = 10
foo()
関数のfoo()を呼び出した時に、変数xが実行される前に呼び出されています。
xはどこにも定義されていないのにも関わらず参照される為エラーとなります。
このソースを直す場合、次のようになります。
def foo():
x = 10 # xを先に定義します。
print(x)
foo()
このソースはエラーが出ることなく実行されます。
さいごに
今回はpythonで変数の定義(割当て)前に参照してエラーが発生した場合でした。
実際僕が書いていたコードも、ソースの無駄な部分や簡潔化の為にコピペをしていて、必要な変数がのコピペ漏れによって発生しました。
本来の設計通りに全てうまく行けばいいですが、機能追加や仕様が変更なんてことは避けられないのでこのエラーの理由を知っていると便利だと思います。
最後までお読みいただきありがとうございました。
|