Open1
PythonのUnboundLocalErrorで勘違いした話
はじめに
Python で UnboundLocalError が出た際の Traceback で勘違いしたことをメモしておきます。
動くコード
関数の中からglobal変数を参照してprintするコードがあります。
結果は 1
になります。
l = [1,2,3]
def a():
print(l[0])
a()
# 1
UnboundLocalErrorとなるコード
下記はエラーになり、エラー箇所は関数 a
の2行目と出ています。
l = [1,2,3]
def a():
print(l[0])
l += [4] # 追加
a()
#Traceback (most recent call last):
# File "<stdin>", line 1, in <module>
# File "<stdin>", line 2, in a
#UnboundLocalError: local variable 'l' referenced before assignment
JupyterLabのTracebackの方がわかりやすいかと思います
勘違い
エラーを引き起こしてるのが l[0]
と思いましたが、
実際には l += [4]
の影響でした。
Tracebackが l[0]
に当たっていた理由は下記のような背景なのかと思いました。
違ったらアドバイスいただけるとありがたいです!
-
l += [4]
というコードがあるなら local変数l
があるはずだ - しかしそのような変数は存在しない
- 存在しない変数
l
を最初に使用しているのはl[0]
だ - Tracebackでは
l[0]
が原因として上がる