问题描述
我正在尝试制作一个RPG风格的简单游戏。 我想使用泡菜保存玩家的位置,但是我不知道如何创建泡菜文件以及在哪里创建它。这是一个示例代码,其中包含即将出现的错误:
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
这是什么问题?任何帮助将不胜感激。 新程序:
import pickle
def inp():
calc=int(input())
def saveload(filename,opt):
global calc
if opt == "save":
with open(filename,'wb') as f:
pickle.dump(int(calc),f)
print('data saved')
elif opt == "load":
with open(filename,'rb') as f:
calc = pickle.load(f)
else:
print('Invalid saveLoad option')
新错误:
Traceback (most recent call last):
File "<pyshell#2>",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
因此由于某种原因,python现在无法识别该变量。
解决方法
- 您需要
filename
作为该函数的参数。 - 您应使用
open
创建文件指针。分配f = (filename,'wb')
时,您正在创建一个元组。 - 确保在两个函数中都声明了
calc
,并且您使用的是global
版本。
import pickle
calc = None
def inp():
global calc
calc=int(input())
def saveload(filename,opt):
global calc
if opt == "save":
with open(filename,'wb') as f:
pickle.dump(calc,f)
print('data saved')
elif opt == "load":
with open(filename,'rb') as f:
calc = pickle.load(f)
else:
print('Invalid saveLoad option')
saveload('/tmp/calc.pickle','save')