我得到一个有趣的错误,而试图使用Unpickler.load(),这是源代码:

open(target, 'a').close()
scores = {};
with open(target, "rb") as file:
    unpickler = pickle.Unpickler(file);
    scores = unpickler.load();
    if not isinstance(scores, dict):
        scores = {};

下面是回溯:

Traceback (most recent call last):
File "G:\python\pendu\user_test.py", line 3, in <module>:
    save_user_points("Magix", 30);
File "G:\python\pendu\user.py", line 22, in save_user_points:
    scores = unpickler.load();
EOFError: Ran out of input

我正在读取的文件是空的。 我如何避免得到这个错误,并得到一个空变量代替?


当前回答

pickle文件很可能是空的。

如果要复制和粘贴代码,那么覆盖pickle文件非常容易。

例如,下面写一个pickle文件:

pickle.dump(df,open('df.p','wb'))

如果你复制这段代码重新打开它,但忘记把'wb'改为'rb',那么你会覆盖文件:

df=pickle.load(open('df.p','wb'))

正确的语法是

df=pickle.load(open('df.p','rb'))

其他回答

也有同样的问题。原来,当我写入pickle文件时,我没有使用file.close()。插入这一行,错误就不再存在了。

您可以捕获该异常并从那里返回您想要的任何内容。

open(target, 'a').close()
scores = {};
try:
    with open(target, "rb") as file:
        unpickler = pickle.Unpickler(file);
        scores = unpickler.load();
        if not isinstance(scores, dict):
            scores = {};
except EOFError:
    return {}
if path.exists(Score_file):
      try : 
         with open(Score_file , "rb") as prev_Scr:

            return Unpickler(prev_Scr).load()

    except EOFError : 

        return dict() 

注意,打开文件的模式是“a”或其他有字母的“a”也会因为覆盖而出错。

pointer = open('makeaafile.txt', 'ab+')
tes = pickle.load(pointer, encoding='utf-8')

pickle文件很可能是空的。

如果要复制和粘贴代码,那么覆盖pickle文件非常容易。

例如,下面写一个pickle文件:

pickle.dump(df,open('df.p','wb'))

如果你复制这段代码重新打开它,但忘记把'wb'改为'rb',那么你会覆盖文件:

df=pickle.load(open('df.p','wb'))

正确的语法是

df=pickle.load(open('df.p','rb'))