所以我编写了一个使用数据库的程序,这个数据库存储了一个字典。 要将字典存储在 .db 文件中,我使用pickle。
一切都很好,但在运行代码时会出现此错误消息。
line 23, in save_data
pickle.dump(database,datafile)
UnboundLocalError: local variable 'database' referenced before assignment
save_data()
是一个保存文件的函数,但在发布代码之前我想发布整个部分。
if com == "agregar": # "com" stands for command
print("Escribe el nombre y el dinero del sujeto en cuestion")
tempname = str(input("Nombre: "))
tempvalue = int(input("Dinero: "))
load_data()
print(database,"hey") #Print intended for debug
if tempname in database:
database[tempname] += tempvalue
else:
database[tempname] = tempvalue
save_data()
请原谅西班牙语,我正在为那些讲西班牙语的人写这段代码。
load_data()
是不言自明的,它将数据文件加载到数据库变量
def load_data():
global database
with open(namedata, "rb") as datafile:
try:
database = pickle.load(datafile)
except EOFError:
database = {}
Save_data()
:
def save_data():
with open(namedata, "wb") as datafile:
pickle.dump(database,datafile)
del database
所以你看到我在那里写的打算用于调试的打印?是的,那个。 代码运行时,打印出来
Escribe el nombre y el dinero del sujeto en cuestion
Nombre: Jon
Dinero: 1000
{} hey
Traceback (most recent call last):
File "ex33.py", line 97, in <module>
main()
File "ex33.py", line 93, in main
main2(tempcom)
File "ex33.py", line 63, in main2
save_data()
File "ex33.py", line 23, in save_data
pickle.dump(database,datafile)
UnboundLocalError: local variable 'database' referenced before assignment
所以这就是说数据库被声明所以可以打印(database = {}),但是在save_data()函数中是不是?即使这个变量是全局的? 另外,在实验中,我用它的内容替换了 save_data()函数
if com == "agregar":
print("Escribe el nombre y el dinero del sujeto en cuestion")
tempname = str(input("Nombre: "))
tempvalue = int(input("Dinero: "))
load_data()
print(database,"hey")
if tempname in database:
database[tempname] = database[tempname] + tempvalue
else:
database[tempname] = tempvalue
with open(namedata, "wb") as datafile:
pickle.dump(database,datafile)
del database
发生这种情况:
Escribe el nombre y el dinero del sujeto en cuestion
Nombre: danny
Dinero: 1000
Traceback (most recent call last):
File "ex33.py", line 99, in <module>
main()
File "ex33.py", line 95, in main
main2(tempcom)
File "ex33.py", line 58, in main2
print(database,"hey")
UnboundLocalError: local variable 'database' referenced before assignment
打印(数据库,&#34;嘿&#34;)不能再打印了,但为什么呢?
还有其他函数使用save_data()和load_data(),这些函数正常工作,例如
if com == "list":
print('Elige un nombre o escribe "completa" para mostrarla entera')
templistcom = str(input("> "))
load_data()
while templistcom not in database:
if templistcom == "completa": return
print("Esta entrada no existe")
templistcom = str(input("> "))
if templistcom == "completa":
for key in database:
print(key, ":" ,database[key])
else:
print(templistcom, ":", database[templistcom])
save_data()
=============================================================
ex33.py
File Created[REG]
Bienvenido
Selecciona un comando
['list', 'agregar', 'registro', 'salir']
Comando: list
Elige un nombre o escribe "completa" para mostrarla entera
> Ken
Esta entrada no existe
> complta
Esta entrada no existe
> completa
Quieres salir?
si / no
> si
如您所见,此代码执行数据库save_data,load_data,它确实启动了错误。我一直在寻找答案,但我找不到有效的答案,请帮忙。 如果我没有说清楚,我会尽力表达自己,毕竟英语不是我的本土语言。