2016-10-18 5 views
-1

Ich bin noch neu bei Python. Muss ich versuchen: und außer ValueError? Wenn nicht, wann und sollte ich sie benutzen? Einige Teile mit und ohne es ZB arbeitenMuss ich versuchen: und außer ValueError?

Def Main_Menu(): 
    Main_menu_op = input("A.Start \nB.Options \nC.Exit") 
    Try: 
     if Main_menu_op == "A" or "a": 
      Start() 

     elif Maim_menu_op == "B" or "b": 
      Options() 

     elif Main_menu_op == "C" or "c": 
      Exit() 
    except ValueError: 
     print("error") 
     Main_menu() 

ich dies gerade eingegeben, da ich auf meinem Tablet bin und nicht mein pc ignorieren so einfach keine Fehler

Ps dieser Teil eines Textes Spiel Ich arbeite an

+0

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

Antwort

2

tryexcept 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":

+0

Danke. Du hast ein weiteres meiner Probleme gelöst und dieses –

+0

Da auf Lager, wenn Sie wählen würden, welcher NPC zu ta –

+0

* drücken Sie Enter geben Entschuldigung .Talk, es würde immer gehen zum Schmied –

0

Sie sollten nur try und except ...Error (documentation) verwenden, wenn Sie wissen, dass Sie einen bestimmten bekannten Fehler sicher behandeln können.

Also, wenn Sie einen bestimmten Fehler erwarten, wie ein ValueError, können Sie es abfangen und handhaben, anstatt Sie zum Absturz zu bringen. Angenommen, Sie haben eine Benutzereingabe haben und erwarten eine Zahl:

... 
a = raw_input('Please give me a number: ') # input(...) on Python 3. 
try: 
    number = float(a) 
except ValueError: 
    print 'You have not given me a valid number, defaulting to 0.' 
    number = 0. 
# do stuff with number 
... 

Wenn Sie einen Fehler nicht oder nicht bereit sind, erwarten sie zu handhaben (oder es gibt keine richtige Art und Weise zu handhaben), möchten Sie vielleicht den Fehler sehen und seine Spur auf der Konsole, so dass Sie es debuggen können.

In Ihrem Beispiel können Sie ein 'else' verwenden, um zu sagen, dass der angegebene Befehl nicht erkannt wird, und nach einem anderen fragen.

Verwandte Themen