注目キーワード
  1. 技術
  2. 広告
  3. IDFA
  4. PHP
  5. WordPress

【python】referenced before assignment と出たときの対処法

  • 2021年2月8日
  • 2021年2月15日
  • 技術
  • 0件

referenced before assignment とエラーが出た。

pythonで処理を実装している際に、エラーが出ていたいので、エラー内容を書き出してみると、下記のようなエラーが出ました。

// str(type(e))
<type 'exceptions.UnboundLocalError'>
// e.args
("local variable 'counter' referenced before assignment",)
// e.message
local variable 'counter' referenced before assignment
// str(e)
local variable 'counter' referenced before assignment

そのまま読んでみると、ローカル変数のcounterが、割り当て前に参照されていますと書かれています。

原因と対策

下記のコードがあった場合、print(x) では定義されていない値を参照しているため、同様のエラーが発生します。

def setNumber():
    print(x)
    x = 2

x = 1
setNumber()

処理を見ると、グローバル変数をセットして、senNumberの関数の中で、print と 代入を行なっておりますが、pythonでは、セットしてあるグローバル変数に、あとから関数内で、ローカル変数として定義し直すことができません。そのため、x = 2が書かれておりますが、printされているのは、代入の前なので、まだ定義されていない変数を出力しようとしているよとエラーが出るようになっています。そのため、

def setNumber():
    x = 2
    print(x)

x = 1
setNumber()

のようにしてあげれば、エラーは出なくなります。