Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Pickle在犯错误_Python_Pickle - Fatal编程技术网

Python 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)

我想做一个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)
        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