try
except
Blöcke sollen Code einschließen, der einen Laufzeitfehler verursachen könnte. Das optionale Argument vom Fehlertyp (in diesem Fall haben Sie die Eingabe ValueError
) wird den Block so ändern, dass er nur diese Art von Ausnahme abfängt. In Ihrem Beispiel sieht es so aus, als wollten Sie eine Fehlermeldung ausgeben, wenn keine der angegebenen Optionen korrekt ausgewählt wurde.
Wie geschrieben, wird keine der if-Anweisungen bestehen, wenn eine andere Eingabe empfangen wird, aber keine Ausnahme generiert wird. Anstatt zu versuchen: außer, sollten Sie wahrscheinlich nur einen zusätzlichen else
Block auf Ihre if
Anweisung verwenden. Wahre Ausnahmen sind im Allgemeinen für das Beenden des Codes reserviert, wenn es versucht, etwas illegal wie durch 0 zu teilen. Wenn Sie benutzerdefinierte Ausnahme nachahmen wollten, um illegales Verhalten nachzuahmen, müssten Sie testen, wann es ausgelöst werden sollte (wahrscheinlich mit einer if-Anweisung)) Rufen Sie dann raise
mit Ihrer benutzerdefinierten Ausnahme auf.
Ich mag auch darauf hinweisen, dass in Ihren if
und elif
Bedingungen, ich glaube, Sie den Operator Vorrang von ==
und or
sind zu verkennen. Der Äquivalenzoperator: == wird zuerst aufgerufen, weil die Operatorpriorität entweder einen wahren oder einen falschen Wert erzeugt, der dann oder ausgewertet wird. Der wahre oder falsche Wert wird mit einer nicht leeren Zeichenfolge ('a'
, 'b'
oder 'c'
) verglichen, die immer als wahr ausgewertet wird. Stattdessen könnten Sie einen weiteren Vergleich == für etwas wie hinzufügen: if Main_menu_op == "A" or Main_menu_op == "a":
Wenn Sie von dem Fehler wiederherstellen möchten, können Sie die Ausnahme abfangen. Wenn Sie den Fehler nicht beheben möchten, müssen Sie die Ausnahme nicht abfangen. – khelwood