1. ホーム
  2. python

[解決済み】なぜ「Pickle - EOFError.」が発生するのか?空のファイルを読むと「Ran out of input」と表示されるのはなぜですか?

2022-02-08 17:20:38

質問

を使おうとすると、面白いエラーが発生します。 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() を使う必要はありません。 ; .