Ben kullanırlılık bir fonksiyonu içine koyun daha az verimlidir olarak, dosya üzerinde kontrol akışı için alıcı hatayı önlemek ve ben ediyorum dosyayı açmak için içerik yöneticilerini kullanır.
import os
import pickle
def read_or_new_pickle(path, default):
if os.path.isfile(path):
with open(path, "rb") as f:
try:
return pickle.load(f)
except StandardError: # so many things could go wrong, can't be more specific.
pass
with open(path, "wb") as f:
pickle.dump(default, f)
return default
kullanımı:
foo = read_or_new_pickle(path="var.pickle", default=3)
foo
döner
foo = read_or_new_pickle(path="var.pickle", default=4)
3
ve foo
hala 3
döndürür.
Kuşkusuz, şu oldukça kısa ve zarif, ama çok şeyler yanlış gidebilir ve yakalamak zorundayız herşey (Bana inanmıyorsanız bu deneyin:? import io, pickle; pickle.load(io.BytesIO(b"\x00"))
ve ikili oynamak):
Aynı kullanım. Ancak, dosyanın boş veya hatalı biçimlendirilmiş bir dosyada ikinci kez açılmasıyla ilgili bir hatayı önlemek için yeterince hızlı kapatılmayacağı endişesiyle endişeliyim. Bu nedenle içerik yöneticisini kullanın: