Ich bin gerade auf einen total seltsamen Fehler gestoßen. Ich speichere eine Auswahl von Dingen in einer einzigen Datei. Eine davon ist eine Version einer Klasse namens Tracker, und diese Kopie wird tracker genannt.
file = shelve.open(worldname, 'n')
file['Terramap'] = terramap
file['Satmap'] = satmap
file['Gasmap'] = gasmap
file['Planetset'] = planetset
file['World'] = minimap
file['Picture'] = picturemap
file['Worlddata'] = worlddata
file['Dimension'] = dimension
print "prüfen", len(tracker.families)
file['Tracker'] = tracker
file['Schedule'] = schedule
file['Time'] = time
file.close()
Wenn ich kurz vor der Datei etwas von tracker ausdrucken lasse, nur um zu testen, ob tracker noch existiert, kann es tatsächlich den tracker erkennen. Aber dann, nur eine Zeile später, kommt folgendes:
File "C:\Users\Mark\Desktop\Ultima Ratio Regum\URR0-2-1.py", Zeile 17522, in world_menu
file['Tracker'] = tracker
Datei "C:\Python27\lib\shelve.py", Zeile 132, in __setitem__
p.dump(value)
TypeError: erwartet String- oder Unicode-Objekt, NoneType gefunden
Ich bin einfach... ratlos. Das ist noch nie passiert, und ich verstehe nicht, wie das sein kann! Kann jemand etwas Licht ins Dunkel bringen? Alles, was ich heute gemacht habe, war, einige Dinge zu tracker hinzuzufügen, aber tracker speichert eigentlich nur Listen von Strings, bis zu ein paar tausend, aber das war's. Wenn ich jedoch einen neuen tracker erstellen lasse, bevor das Speichern beginnt, speichert es einwandfrei.
EDIT:
Die Ausführung von pickle.dumps(tracker) zeigt:
File "C:\Users\Mark\Desktop\Ultima Ratio Regum\29-12-test.py", Zeile 17515, in world_menu
pickle.dumps(tracker)
Datei "C:\Python27\lib\pickle.py", Zeile 1374, in dumps
Pickler(file, protocol).dump(obj)
Datei "C:\Python27\lib\pickle.py", Zeile 224, in dump
self.save(obj)
Datei "C:\Python27\lib\pickle.py", Zeile 286, in save
f(self, obj) # Aufruf einer ungebundenen Methode mit explizitem self
Datei "C:\Python27\lib\pickle.py", Zeile 725, in save_inst
save(stuff)
Datei "C:\Python27\lib\pickle.py", Zeile 286, in save
f(self, obj) # Aufruf einer ungebundenen Methode mit explizitem self
...
PicklingError: Can't pickle : it's not found as __main__.capitalize