unbundLocalERROR:在赋值之前引用了局部变量“url_request”

2024-04-20 04:37:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我想我要疯了。

url_request = 0

def somefunction():
    url_request+=1

if __name__ =='__main__':
    somefunction()

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


Tags: name概念urlifmainrequestdef错误
2条回答

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

def somefunction():
    global url_request
    url_request+=1

当您在本地作用域中赋给变量时,除非您首先使用global语句告诉python其他情况,否则假定它是本地变量。

对于Python2.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_requestintint是不可变的,因此操作url_request+=1不会更改值,它应该将新值重新分配给变量名。其次,您没有为这个变量指定global标识。所以解释器只有一个选项——假设url_request为局部变量。但是。。。你没有在任何地方声明它的价值。。。。

UnboundLocalError意味着您尝试使用变量值执行操作,而不在之前声明它。希望这将帮助您了解更多关于Python变量/名称/作用域的信息。

相关问题 更多 >