Und man sollte das with-Statement beim öffnen von Dateien benutzen - wieso "wehrst" Du Dich dagegen?
Weil ich aus irgendeinem Grund immer noch nicht sehe, inwiefern mein "try - except" damit los wird

.
Wenn ich load() aufrufe (mal egal von wo), dann soll es phonebook.data öffnen, oder, wenn dieses nicht existiert, eine Datei erstellen, die phonebook.data heisst.
Und 'with open('phonebook.data') as f:' gibt mir ja einen IOError, wenn ich nach einer Datei suche, die nicht existiert... also genauso, wie wenn ich es mit f = open('phonebook.data').
Oder mache ich was grundsätzlich falsch? =/
Test mit "with... as..." mit phonebookfile, das nicht existiert:
Code: Alles auswählen
Traceback (most recent call last):
File "C:\Python26\Lib\site-packages\Programmieren\Test.py", line 1, in <module>
with open('phonebook.data') as f:
IOError: [Errno 2] No such file or directory: 'phonebook.data'
####Deshalb hatte ich ein except IOError eingefügt, das eine Datei erstellt, wenn sie nicht existiert
Meine load und save Funktionen:
Code: Alles auswählen
def pb_load(f = 'phonebook.data'):
with open('phonebook.data') as f:
pb = pickle.load(f)
return pb
def pb_save(pb):
with open('phonebook.data', "w") as f:
pickle.dump(pb, f)
f.close()
Da ich meines Wissens nur im cmd argumente hinzufügen kann, dieses Programm aber meistens direkt ausführe, sollte der Name ('phonebook.data') wenn möglich als default drin sein.
Die neue Umstrukturierung von manage_menu ist super, danke.

Habe auch ein paar Ausgabeänderungen unternommen, aber ich poste die Version dann mal, wenn ich das mit dem "with open(---) as --:" verstanden hab.
Immerhin rufst du in Zeile 38 erneut die main-Funktion auf, du hast die Rekursion also nur sehr gut versteckt. Wie schon einmal gesagt: Parameter und Rückgabewerte. Erwähnte ich eigentlich Parameter und Rückgabewerte?
Ja, hast du =). Ich hab mich auch eingelesen, auch wenns an der Anwendung noch ein bisschen klemmt. Aber mein Fehler war, dass ich nach dem "break" im main() das "False" vergessen hatte, weshalb ich einfach wieder im Loop drin war. Weshalb ich mich dann gleich im manage_menu() wiederfand, ist mir noch unklar, aber das ist jetzt nicht so wichtig =).