关于python:unboundlocalerror:local变量’url_request’在赋值前被引用

UnboundLocalError: local variable 'url_request' referenced before assignment

本问题已经有最佳答案,请猛点这里访问。

我想我快疯了。

1
2
3
4
5
6
7
url_request = 0

def somefunction():
    url_request+=1

if __name__ =='__main__':
    somefunction()

给出了未绑定的本地错误。我这里遗漏了什么重要概念?


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

1
2
3
def somefunction():
    global url_request
    url_request+=1

当在局部作用域中为变量赋值时,假定它是局部变量,除非首先使用global语句告诉python其他情况。


对于python 2.7,我们必须输入变量类型:全局变量、局部变量。每个函数都为变量创建自己的局部范围。

从本地范围,您可以无限制地读取。您还可以调用全局对象方法,以便从全局修改变量。但不能重新分配值。

查看此代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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_requestintint是不变的,所以操作url_request+=1不会改变值,应该重新给变量名赋值。其次,您没有为这个变量指定global标识。所以解释程序只有一个选择——假设url_request为局部变量。但是…你没有在任何地方声明它的价值…

UnboundLocalError意味着您试图使用变量值执行操作,而不必事先声明它。希望这能帮助您了解更多关于python变量/名称/作用域的信息。