Python Pickle在犯错误
我想做一个RPG风格的简单游戏。 我想使用pickle保存播放器位置,但我不知道如何创建pickle文件以及在何处创建它。下面是出现错误的示例代码:Python Pickle在犯错误,python,pickle,Python,Pickle,我想做一个RPG风格的简单游戏。 我想使用pickle保存播放器位置,但我不知道如何创建pickle文件以及在何处创建它。下面是出现错误的示例代码: def inp(): calc=int(input()) import pickle def saveload(opt): global calc if opt == "save": f = (filename, 'wb') pickle.dump(calc, f)
def inp():
calc=int(input())
import pickle
def saveload(opt):
global calc
if opt == "save":
f = (filename, 'wb')
pickle.dump(calc, f)
f.close
print( 'data saved')
elif opt == "load":
f = (filename, 'rb')
calc = pickle.load(f)
else:
print( 'Invalid saveLoad option')
错误是:
Traceback (most recent call last):
File "<pyshell#1>", line 1, in <module>
saveload('save')
File "C:/Abhay's Folder/shelve test.py", line 7, in saveload
f = (filename, 'wb')
NameError: name 'filename' is not defined
新错误:
Traceback (most recent call last):
File "<pyshell#2>", line 1, in <module>
saveload('/PythonPickle/windows','save')
File "C:\Abhay's Folder\shelve test.py", line 8, in saveload
pickle.dump(int(calc),f)
NameError: name 'calc' is not defined
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
保存加载('/PythonPickle/windows','save')
保存加载中第8行的文件“C:\Abhay's Folder\shelve test.py”
pickle.dump(整数(计算),f)
NameError:未定义名称“calc”
因此,出于某种原因,python现在无法识别该变量。- 您需要
作为函数的参数filename
- 您应该使用
创建文件指针。分配open
时,您正在创建一个元组f=(文件名,'wb')
- 确保声明了
,并且在这两个函数中都使用了它的calc
版本global
导入pickle
计算=无
def inp():
全局计算
计算=int(输入())
def保存加载(文件名,opt):
全局计算
如果opt==“保存”:
将open(filename,'wb')作为f:
泡菜倾倒(计算,f)
打印('已保存数据')
elif opt==“加载”:
将open(filename,'rb')作为f:
计算=酸洗负荷(f)
其他:
打印('无效的保存加载选项')
保存加载('/tmp/calc.pickle','save')
错误是不言而喻的,在您的代码中,文件名是一个变量,但它没有定义,因为您从未分配过它。filename
应该有一个文件路径,您希望在其中保存未分配的pickled数据,以将实际文件名分配给filename
变量。看起来它应该是f=open(文件名,'wb'))
——仅仅给f
分配一个元组对您没有任何好处。因此,我必须先创建一个文件,然后使用该文件存储值?在您的回答中,您已将该文件命名为/tmp/calc.pickle,那么我必须先创建一个具有该路径的文件吗?不,只要您已经有/tmp/目录(在许多操作系统上都会这样),它应该可以工作。如果不工作,则将其更改为其他目录。“wb”标志允许它以二进制格式写入新文件(或覆盖现有文件)。请尝试。我尝试使用您的代码并创建了一个新目录(因为您使用的目录不在那里)。程序正在运行,但当我尝试保存变量的值时,出现了一个错误--未定义名称calc。calc已被定义为全局变量。请使用详细信息更新您的原始问题-很难从您的评论中看出我使用搁置模块保存数据,因此现在我不需要pickle。是否需要关闭此对话框问题还是什么?
Traceback (most recent call last):
File "<pyshell#2>", line 1, in <module>
saveload('/PythonPickle/windows','save')
File "C:\Abhay's Folder\shelve test.py", line 8, in saveload
pickle.dump(int(calc),f)
NameError: name 'calc' is not defined