我想知道,为什么我在以下代码中出现UnboundLocalError: local variable 'i' referenced before assignment
或NameError: global name 'i' is not defined
错误:
def method1():
i = 0
def _method1():
# global i -- the same error
i += 1
print 'i=', i
# i = 0 -- the same error
_method1()
method1()
我如何摆脱它?在i
method1()
答案 0 :(得分:2)
在py2x中执行此操作的一种方法是将变量本身传递给py3x中的内部方法
这已得到修复,您可以在那里使用nonlocal
语句。
引发错误是因为函数也是对象,并且在定义期间进行评估,并且在定义期间,只要python看到i += 1
(相当于i = i + 1
),它就认为{{1} }是该函数内的局部变量。但是,当实际调用该函数时,它无法在本地找到i
(在RHS上)的任何值,从而引发错误。
i
或使用函数属性:
def method1():
i = 0
def _method1(i):
i += 1
print 'i=', i
return i #return the updated value
i=_method1(i) #update i
print i
method1()
对于py3x:
def method1():
method1.i = 0 #create a function attribute
def _method1():
method1.i += 1
print 'i=', method1.i
_method1()
method1()