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]が原因として上がる