UnboundLocalError:赋值前引用的局部变量'url_request'

use*_*108 9 python

我想我在这里疯了.

url_request = 0

def somefunction():
    url_request+=1

if __name__ =='__main__':
    somefunction()
Run Code Online (Sandbox Code Playgroud)

给我UnboundLocalError.我在这里错过了什么重要概念?

Mar*_*ers 11

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

def somefunction():
    global url_request
    url_request+=1
Run Code Online (Sandbox Code Playgroud)

当您为本地范围中的变量赋值时,它被假定为局部变量,除非您首先使用global语句告诉python.


Ale*_*yev 6

对于Python 2.7,我们必须使用变量类型:global,local.每个函数都为变量创建自己的本地范围.

从本地范围,您可以不受任何限制地阅读.您还可以调用全局对象方法,以便可以从全局修改变量.但你无法重新分配价值.

看看这段代码:

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]
Run Code Online (Sandbox Code Playgroud)

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

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

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