在Python中我收到以下错误:
UnboundLocalError: local variable 'total' referenced before assignment
Run Code Online (Sandbox Code Playgroud)
在文件的开头(在出现错误的函数之前),我使用global关键字声明'total'.然后,在程序的主体中,在调用使用'total'的函数之前,我将它指定为0.我已经尝试在各个地方将它设置为0(包括文件的顶部,就在它被声明之后) ),但我不能让它工作.有谁看到我做错了什么?
码:
import urllib2 as u
import os as o
inn = 'dword.txt'
w = open(inn)
z = w.readline()
b = w.readline()
c = w.readline()
x = w.readline()
m = w.readline()
def Dict(Let, Mod):
global str
inn = 'dword.txt'
den = 'definitions.txt'
print 'reading definitions...'
dell =open(den, 'w')
print 'getting source code...'
f = u.urlopen('http://dictionary.reference.com/browse/' + Let)
a = f.read(800)
print 'writing source code to file...'
f = open("dic1.txt", "w")
f.write(a)
f.close()
j = open('defs.txt', 'w')
print 'finding definition is source …Run Code Online (Sandbox Code Playgroud) 我想弄清楚这个:
c = 1
def f(n):
print c + n
def g(n):
c = c + n
f(1) # => 2
g(1) # => UnboundLocalError: local variable 'c' referenced before assignment
Run Code Online (Sandbox Code Playgroud)
谢谢!
我正在使用PyQt库获取网页的屏幕截图,然后阅读不同URL的CSV文件.我保留一个变量Feed,每次处理URL时都会增加,因此应该增加到URL的数量.
这是代码:
webpage = QWebPage()
fo = open("C:/Users/Romi/Desktop/result1.txt", "w")
feed = 0
def onLoadFinished(result):
#fo.write( column1[feed])#, column2[feed], urls[feed])
#feed = 0
if not result:
print "Request failed"
fo.write(column1[feed])
fo.write(',')
fo.write(column2[feed])
fo.write(',')
#fo.write(urls[feed])
fo.write(',')
fo.write('404,image not created\n')
feed = feed + 1
sys.exit(1)
save_page(webpage, outputs.pop(0)) # pop output name from list and save
if urls:
url = urls.pop(0) # pop next url to fetch from list
webpage.mainFrame().load(QUrl(url))
fo.write(column1[feed])#,column2[feed],urls[feed],'200','image created','/n')
fo.write(',')
fo.write(column2[feed])
fo.write(',')
#fo.write(urls[feed])
fo.write(',')
fo.write('200,image created\n')
feed = feed + 1 …Run Code Online (Sandbox Code Playgroud) 我也试过寻找答案,但我不明白其他人类似问题的答案......
tfile= open("/home/path/to/file",'r')
def temp_sky(lreq, breq):
for line in tfile:
data = line.split()
if ( abs(float(data[0]) - lreq) <= 0.1
and abs(float(data[1]) - breq) <= 0.1):
T= data[2]
return T
print temp_sky(60, 60)
print temp_sky(10, -10)
Run Code Online (Sandbox Code Playgroud)
我收到以下错误
7.37052488
Traceback (most recent call last):
File "tsky.py", line 25, in <module>
print temp_sky(10, -10)
File "tsky.py", line 22, in temp_sky
return T
UnboundLocalError: local variable 'T' referenced before assignment
Run Code Online (Sandbox Code Playgroud)
第一个print语句正常工作,但第二个不起作用.我尝试将T设为全局变量,但这使得两个答案都相同!请帮忙!
在下面的Python代码中,我得到了一个UnboundLocalError.据我所知,局部函数共享包含函数的局部变量,但这似乎不是这里的情况.我认识到a在这种情况下这是一个不可变的值,但这应该不是问题.
def outer():
a = 0
def inner():
a += 1
inner()
outer()
Run Code Online (Sandbox Code Playgroud)
看起来内部函数已经收到了父函数中所有引用的副本,因为UnboundLocalError如果值的值a被包装在一个可变类型中,我就不会得到异常.
有人能够澄清这里的行为,并指出相应的Python文档吗?
我不知道为什么当a位于def test()它时找不到并给出错误
UnboundLocalError:无法访问未与值关联的局部变量“a”
import keyboard
import time
a = 0
def test():
a+= 1
print("The number is now ", a)
time.sleep(1)
while keyboard.is_pressed('i') == False:
test()
Run Code Online (Sandbox Code Playgroud)
我尝试在 内部设置a为global a或使用修饰符,但它似乎不起作用。有没有办法让它识别并正常运行?nonlocaldefa
如果我运行以下代码:
x = 1
class Incr:
print(x)
x = x + 1
print(x)
print(x)
Run Code Online (Sandbox Code Playgroud)
它打印:
1
2
1
Run Code Online (Sandbox Code Playgroud)
没问题,这正是我的预期.如果我做以下事情:
x = 1
class Incr:
global x
print(x)
x = x + 1
print(x)
print(x)
Run Code Online (Sandbox Code Playgroud)
它打印:
1
2
2
Run Code Online (Sandbox Code Playgroud)
也是我所期待的.没有问题.
现在,如果我开始按如下方式创建增量函数:
x = 1
def incr():
print(x)
incr()
Run Code Online (Sandbox Code Playgroud)
它按照我的预期打印1.我假设它这样做是因为它无法x在其本地范围内找到,因此它搜索其封闭范围并找到x它.到目前为止没有问题.
如果我这样做:
x = 1
def incr():
print(x)
x = x + 1
incr()
Run Code Online (Sandbox Code Playgroud)
这在回溯中给出了以下错误:
UnboundLocalError:赋值前引用的局部变量'x'.
为什么Python不只是搜索封闭空间,x因为它找不到x像我class Incr一样用于赋值的值?请注意,我不是在问这个功能如何工作.我知道如果我执行以下操作,该功能将起作用:
x = 1
def incr(): …Run Code Online (Sandbox Code Playgroud) 在Python中,if语句中的变量范围是否在if语句之外可见?(来自Java背景,所以发现这有点奇怪)
在下面的例子中,name首先在if-block中定义,但变量在if-block之外也是可见的.我原以为会发生错误但是'joe'会打印出来.
if 1==1:
name = 'joe'
print(name)
Run Code Online (Sandbox Code Playgroud) 我正在尝试添加或减去已定义的变量,但我无法弄清楚如何使用新值覆盖旧值.
a = 15
def test():
a = a +10
print ( a )
test()
Run Code Online (Sandbox Code Playgroud)
错误信息:
Traceback (most recent call last):
File "test.py", line 7, in <module>
test()
File "test.py", line 4, in test
a = a +10
UnboundLocalError: local variable 'a' referenced before assignment
Run Code Online (Sandbox Code Playgroud)