TypeError bei pickle.load()...

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Üpsilon
User
Beiträge: 222
Registriert: Samstag 15. September 2012, 19:23

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
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.
Üpsilon
User
Beiträge: 222
Registriert: Samstag 15. September 2012, 19:23

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
PS: Die angebotene Summe ist beachtlich.
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Das ist schon immer so, dein Buch ist fehlerhaft.
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.
Üpsilon
User
Beiträge: 222
Registriert: Samstag 15. September 2012, 19:23

cofi hat geschrieben:Das ist schon immer so, dein Buch ist fehlerhaft.
Watt fürn Müll, aber danke! :D
PS: Die angebotene Summe ist beachtlich.
Antworten