当前位置: 首页 > 面试题库 >

为什么在读取一个空文件时出现“ Pickle-EOFError:Ran out of input”的问题?

祁承嗣
2023-03-14
问题内容

尝试使用时出现一个有趣的错误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

我尝试读取的文件为空。如何避免出现此错误,而是获取一个空变量?


问题答案:

我先检查文件是否为空:

import os

scores = {} # scores is an empty dict already

if os.path.getsize(target) > 0:      
    with open(target, "rb") as f:
        unpickler = pickle.Unpickler(f)
        # if file is not empty scores will be equal
        # to the value unpickled
        scores = unpickler.load()

而且open(target, 'a').close()在您的代码中什么也没做,您不需要使用;



 类似资料:
  • 我正在尝试读取1500 csv文件,但我收到以下错误。 读取时出错。表(file=file,header=header,sep=sep,quote=quote,:不允许重复的“row.names” 代码: 但当单独打开并保存文件时,我可以读取文件。但由于有1500个文件,我需要手动完成。如有任何帮助,我将不胜感激?

  • 我正在实现一个从s3获取文件、读取并删除它的路由。问题是删除后继续搜索文件并进入错误,我不明白为什么路由不停止。 这是我的

  • 我知道为什么会出现错误:这是因为我想读取数据的表(Htest)为null。 我检查了我的excel,有一张正确名称为“htest”的表。 我还检查了工作簿中的工作表数。它返回工作簿的正确页数 我不知道为什么工作簿中的工作表是可用的,但代码返回null??我错过了什么?有人有同样的问题吗?或者你能给我一个提示来使用它吗? 谢谢你。 错误是:

  • 为什么我的程序在读取文件时忽略零?例如,以下是文件中的数字: 这是我的输出: 这是我的代码:

  • 我在读取R中的txt文件时遇到了一些问题,我认为该文件是由行尾问题创建的。我有一个包含两列的数据帧:第一列包含格式为__label__1234的标签,第二列是一个文本字符串(出于隐私原因,我无法共享实际文本,但它可能类似于“我在麦道工作”)。我首先使用write。表将此信息存储在文本文件中 然后我稍后尝试将该文本文件读回R,我得到了不希望的结果。 数据出来看起来类似于 当我渴望的是 知道我可以在读