Em có 1 đoạn code Python như sau:
def do():
def run():
if (i > MAX):
print("Done")
return None
else:
print(i)
i += 1
from time import sleep
sleep(0.1)
run()
MAX = 100
i = 0
run()
do()
Code này em bị lỗi UnboundLocalError: local variable 'i' referenced before assignment
. Dòng i = 0
dù em có khai báo trước hay sau run()
đều bị lỗi như trên. Khi em thêm dòng nonlocal i
vào trước print(i)
thì compile được và có dòng warning SyntaxWarning: name 'i' is used prior to nonlocal declaration
.
Em muốn thắc mắc là, tại sao biến MAX
không cần khai báo global
hay nonlocal
mà biến i phải khai báo nonlocal
(và có thể là global
)?