Saya mendapatkan kesalahan yang menarik saat mencoba menggunakan Unpickler.load()
, berikut ini kode sumbernya:
open(target, 'a').close()
scores = {};
with open(target, "rb") as file:
unpickler = pickle.Unpickler(file);
scores = unpickler.load();
if not isinstance(scores, dict):
scores = {};
Inilah traceback:
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
File yang saya coba baca kosong. Bagaimana saya bisa menghindari kesalahan ini, dan mendapatkan variabel kosong sebagai gantinya?
open(...).close()
ada di sini untuk memastikan file tersebut adaJawaban:
Saya akan memeriksa bahwa file tersebut tidak kosong dulu:
Juga
open(target, 'a').close()
tidak melakukan apa pun dalam kode Anda dan Anda tidak perlu menggunakan;
.sumber
;
tetapi saya hanya menggunakan C, dan tidak menggunakan;
di akhir baris membuat saya menangis TTEOF exception
tidak akan menyelamatkan Anda dari semua potensi kesalahan lainnya.Sebagian besar jawaban di sini telah membahas cara mengatur pengecualian EOFError, yang sangat berguna jika Anda tidak yakin apakah objek yang diawetkan kosong atau tidak.
Namun, jika Anda terkejut bahwa file acar kosong, itu mungkin karena Anda membuka nama file melalui 'wb' atau mode lain yang dapat menimpa file tersebut.
sebagai contoh:
Ini akan menimpa file acar. Anda mungkin telah melakukan ini karena kesalahan sebelum menggunakan:
Dan kemudian mendapat EOFError karena blok kode sebelumnya menimpa file cd.pkl.
Saat bekerja di Jupyter, atau di konsol (Spyder) saya biasanya menulis pembungkus di atas membaca / menulis kode, dan memanggil pembungkus kemudian. Ini untuk menghindari kesalahan baca-tulis yang umum, dan menghemat sedikit waktu jika Anda akan membaca file yang sama beberapa kali melalui travails Anda
sumber
However, if you're surprised that the pickle file is empty, it could be because you opened the filename through 'wb' or some other mode that could have over-written the file
Ini membuat Anda menang +1Seperti yang Anda lihat, itu sebenarnya kesalahan alam ..
Konstruksi tipikal untuk membaca dari objek Unpickler akan seperti ini ..
EOFError dimunculkan begitu saja, karena ia membaca file kosong, itu hanya berarti End of File ..
sumber
Kemungkinan besar file acar tersebut kosong.
Sangat mudah untuk menimpa file acar jika Anda menyalin dan menempelkan kode.
Misalnya yang berikut ini menulis file acar:
Dan jika Anda menyalin kode ini untuk membukanya kembali, tapi lupa untuk perubahan
'wb'
ke'rb'
maka Anda akan menimpa file:Sintaks yang benar adalah
sumber
sumber
Anda dapat menangkap pengecualian itu dan mengembalikan apa pun yang Anda inginkan dari sana.
sumber
Perhatikan bahwa mode membuka file adalah 'a' atau beberapa lainnya memiliki alfabet 'a' juga akan membuat kesalahan karena penimpaan.
sumber