Seite 1 von 1

TypeError bei pickle.load()...

Verfasst: Dienstag 25. Juni 2013, 19:08
von Üpsilon
Hallööchen, liebe Python-Freunde!! :lol:

Nach längerer Zeit, in der ich nicht so viel mit Python gemacht habe (nur so ein bisschen in der Schule) hab ich mal wieder eine Frage.

Unser Informatik-Kurs hat ein kleines Jump&Run-Spiel programmiert, und der Lehrer hat die ganzen Level zu einem vollständigen Spiel zusammengefügt. Der Score und der Spielfortschritt werden dabei (vermutlich) durch pickle.dump() in eine Datei namens SPIELSTAND geschrieben.

Nun bin ich auf die gewitzte Idee gekommen, den Inhalt der Save-Datei auszulesen, sodass ich vlt. mal den Inhalt manipulieren kann und so einen superhohen Score ercheaten kann :mrgreen: . Aber erstmal will ich den Inhalt nur auslesen. Und zwar mit diesem Programm:

Code: Alles auswählen

import pickle
datei = open("SPIELSTAND")
ergebnis = pickle.load(datei)
print(ergebnis)
Das Problem ist, dass ich einen merkwürdigen Error erhalte :? :

Code: Alles auswählen

>>> ================================ RESTART ================================
>>> 
Traceback (most recent call last):
  File "C:/Users/Roman/Documents/Gymgi 3D - Gymgi auf Reisen/gymgi-cheat.py", line 3, in <module>
    ergebnis = pickle.load(datei)
TypeError: 'str' does not support the buffer interface
>>> 
Ich habe drei Theorien dazu: :arrow:
  • Die Datei wurde gar nicht mit pickle beschrieben.
  • Versionskonflikt: Das Spiel ist ein mit portablem Python 3.0 zusammengefügtes Executable, aber ich versuche, mit Python 3.3 zu lesen.
  • Irgendwas ist mit der Kodierung.
Kann jemand mir sagen, was das Problem ist und wie ich es lösen kann? :?: :idea: :| Wär echt nett.

Mit Grüßen,
Y. :D

Re: TypeError bei pickle.load()...

Verfasst: Dienstag 25. Juni 2013, 19:12
von BlackJack
@Üpsilon: Pickle-Dateien sind Binärdateien. Du öffnest sie aber als Textdatei. Das ist die Voreinstellung wenn das `mode`-Argument bei `open()` nicht angegeben wird.

Re: TypeError bei pickle.load()...

Verfasst: Dienstag 25. Juni 2013, 20:47
von Üpsilon
Echt? o_O Ist das erst seit Py3 so oder schon immer? Ich hab nämlich n Python-Buch, da wurde eine Datei einfach ganz normal geöffnet und dann die Daten entpickelt...

Also müsste ich dann sagen:

Code: Alles auswählen

datei = open("SPIELSTAND", "rb")
oder?

Danke für die flotte Antwort! :D

Re: TypeError bei pickle.load()...

Verfasst: Dienstag 25. Juni 2013, 20:51
von cofi
Das ist schon immer so, dein Buch ist fehlerhaft.

Re: TypeError bei pickle.load()...

Verfasst: Dienstag 25. Juni 2013, 20:55
von BlackJack
@Üpsilon: Vor Python 3 ist einem das nicht *sofort* auf die Füsse gefallen, war aber trotzdem falsch und kann auch dort zu Fehlern führen.

Re: TypeError bei pickle.load()...

Verfasst: Mittwoch 26. Juni 2013, 12:26
von Üpsilon
cofi hat geschrieben:Das ist schon immer so, dein Buch ist fehlerhaft.
Watt fürn Müll, aber danke! :D