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()
のようにしてあげれば、エラーは出なくなります。