Seite 1 von 1

pickle.Unpickler mit EOFError

Verfasst: Samstag 29. Juni 2013, 10:14
von cmate
Hallo,
ich bekomme für folgenden Code einen EOF Error.

Code: Alles auswählen

import pickle  

w = pickle.Pickler(open("eineDatei.dat", "wb"),2)
w.dump({"name" : "Lottermann", "vorname" : "Erwin"})
w.dump([23, 5, 666])

r = pickle.Unpickler(open("eineDatei.dat", "rb"))
r.load()
r.load()
Die Fehlermeldung beim ausführen lautet dann:

Code: Alles auswählen

Traceback (most recent call last):
  File "./code.py", line 8, in <module>
    r.load()
EOFError
Nachdem ich das mit verschiedenen Beispielen im Netz verglichen habe, finde ich bisher keinen Fehler. Muss ich die zum Schreiben geöffnete Datei eventuell doch erst schliessen? Wenn, dann ist mir in diesem Zusammenhang unklar wie ich das mache.

Re: pickle.Unpickler mit EOFError

Verfasst: Samstag 29. Juni 2013, 11:01
von BlackJack
@cmate: Ja, Du musst die Datei schliessen. Das ist ein schönes Beispiel dafür warum man das immer machen sollte, entweder explizit oder noch besser mit der ``with``-Anweisung.

Dazu musst Du das Dateiobjekt an einen Namen binden, damit Du es beim erstellen des `Pickler`-Exemplars übergeben kannst.

Code: Alles auswählen

#!/usr/bin/env python
import pickle  


def main():
    filename = 'eineDatei.dat'
    with open(filename, 'wb') as data_file:
        pickler = pickle.Pickler(data_file, pickle.HIGHEST_PROTOCOL)
        pickler.dump({'name' : 'Lottermann', 'vorname' : 'Erwin'})
        pickler.dump([23, 5, 666])
    with open(filename, 'rb') as data_file:
        unpickler = pickle.Unpickler(data_file)
        print unpickler.load()
        print unpickler.load()


if __name__ == '__main__':
    main()

Re: pickle.Unpickler mit EOFError

Verfasst: Samstag 29. Juni 2013, 11:37
von cmate
Vielen Dank für deine Hilfe. Damit komme ich weiter. :D