9

觉得我要疯了。

url_request = 0

def somefunction():
    url_request+=1

if __name__ =='__main__':
    somefunction()

给了我 UnboundLocalError。我在这里缺少什么重要的概念?

4

2 回答 2

11

您正在分配一个全局变量,这意味着您需要将其标记为全局变量:

def somefunction():
    global url_request
    url_request+=1

当您分配给局部范围内的变量时,它被假定为局部变量,除非您首先使用global语句告诉 python 否则。

于 2012-12-10T10:00:41.913 回答
6

对于 Python 2.7,我们必须使用变量类型:全局、本地。每个函数都为变量创建自己的局部范围。

在本地范围内,您可以不受任何限制地阅读。您还可以调用全局对象方法,因此您可以从全局修改变量。但是你不能重新分配价值。

看看这段代码:

requests = [1,2,3]

def modify():
    requests.append(4)

def redeclare():
    requests = [10,20,30]

modify()
print requests
# will give you [1,2,3,4]

redeclare()
print requests
# will give you [1,2,3,4]

这是怎么回事?您不能requests从本地范围重新分配变量,因此解释器为您创建其他变量 - 在本地范围内用于redeclare调用上下文。

关于您的代码...首先,您尝试从全局范围重新分配变量。为什么?url_requestis int,int是不可变的,所以操作url_request+=1不会改变值,它应该为变量名重新分配新值。其次,您没有global为此变量指定标识。所以解释器只有一个选择 - 假设url_request为局部变量。但是......你没有在任何地方声明它的价值......

UnboundLocalError意味着您尝试使用变量值执行操作而不事先声明它。希望这将帮助您更多地了解 Python 变量/名称/范围。

于 2012-12-10T10:18:18.830 回答