UnboundLocalError: local variable referenced before assignment

Python
本ページはプロモーションが含まれています

はじめに

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で変数の定義(割当て)前に参照してエラーが発生した場合でした。
実際僕が書いていたコードも、ソースの無駄な部分や簡潔化の為にコピペをしていて、必要な変数がのコピペ漏れによって発生しました。

本来の設計通りに全てうまく行けばいいですが、機能追加や仕様が変更なんてことは避けられないのでこのエラーの理由を知っていると便利だと思います。

最後までお読みいただきありがとうございました。

 

タイトルとURLをコピーしました