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

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

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

 

Ads Blocker Image Powered by Code Help Pro

Ads Blocker Detected!!!

We have detected that you are using extensions to block ads. Please support us by disabling these ads blocker.

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