泡菜出错

问题描述

我正在尝试制作一个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')