这很可能是我的错误,这是由于缺乏编码技巧,但是我遇到了以前从未有过的事情,那就是在使用函数并将它们引用其他函数时,变量可以是弄糊涂并产生错误。我需要有人帮助分解正在发生的事情。请帮助并提前谢谢您
import os
def main():
if os.path.exists("Text.txt")==True:
with open("Text.txt", "r") as f:
li=[]
for lines in f:
li.append(eval(lines))
for i in range(0, len(li)):
if i == 0:
a = li[i]
elif i == 1:
b = li[i]
elif i == 2:
c = li[i]
elif i == 3:
d = li[i]
else:
pass
else:
open("Text.txt", "w").close
a=[1]
b=[2]
c=[3]
d=[4]
menu(a, b, c, d)
def menu(a, b, c, d):
print(a, b, c, d)
main()
运行代码时出现错误,提示: 追溯(最近一次通话): main()中的文件“ main.py”第30行,main()文件中的“ main.py”文件第26行,main() 菜单(a,b,c,d) UnboundLocalError:赋值之前引用了本地变量'c'
答案 0 :(得分:1)
import os
def main():
a, b, c, d = None,None,None, None # Use None or any other data type you are using
if os.path.exists("Text.txt"):
with open("Text.txt", "r") as f:
li = []
for lines in f:
li.append(eval(lines))
for i in range(0, len(li)):
if i == 0:
a = li[i]
elif i == 1:
b = li[i]
elif i == 2:
c = li[i]
elif i == 3:
d = li[i]
else:
pass
else:
open("Text.txt", "w").close
a = [1]
b = [2]
c = [3]
d = [4]
menu(a, b, c, d)
def menu(a, b, c, d):
print(a, b, c, d)
main()
在之前定义a,b,c和d,并应解决此问题。
答案 1 :(得分:1)
变量c并非总是在您的代码中定义。
例如使用以下内容进行检查:
def main():
c=None
...
if ...
...
答案 2 :(得分:1)
在“ else”块中,您以写模式打开“ Text.txt”,但是没有任何保存。因此,如果您尝试再次执行该脚本,它将进入“ if”块,打开文件并且什么也没读。例如,代码未进入“ for”循环,因此,该变量无法实例化,从而引发错误。您是说错误与“ c”变量有关,这可能是由于您在文本文件中写了一些东西但少于3行。
当我在文本文件中写两行时,我尝试了您的代码并获得了它:
---------------------------------------------------------------------------
UnboundLocalError Traceback (most recent call last)
<ipython-input-41-275a763cfa3b> in <module>()
28 print(a, b, c, d)
29
---> 30 main()
<ipython-input-41-275a763cfa3b> in main()
24 c=[3]
25 d=[4]
---> 26 menu(a, b, c, d)
27 def menu(a, b, c, d):
28 print(a, b, c, d)
UnboundLocalError: local variable 'c' referenced before assignment