2016-05-29 8 views
0

Ich habe eine Frage, die nicht mit meinem Code zusammenhängt. Ich bin nur Neugierig. Warum kann ich (ich weiß nicht wie es dir geht) nur einen ValueError mit einer try und except Schleife verwenden? zum Beispiel:Python: else ValueError: (Speziell ValueError in diesem Fall)

print("What is 1 + 1?") 
while(True): 
    try: 
     UserInput = int(input(("Your answer here:")) 
     if(UserInput == 2): 
      print("Congratulations you are correct!") 
      break 
     else: 
      print("That is incorrect. Try again!") 
    except ValueError: 
     print("That is not a number. Try again!") 

Das perfekt funktioniert gut (oder zumindest sollte), aber, warum (wenn nicht) würde das nächste Stück Code nicht funktionieren.

print("What is 1 + 1?") 
while(True): 
    UserInput = int(input("Your answer here:")) 
    if(UserInput == 2): 
     print("Congratulations you are correct!") 
     break 
    elif(UserInput != 2): 
     print("That is incorrect. Try again!") 
    else(ValueError): 
     print("That is not a number. Try again!") 

Als ich das laufen bekomme ich diesen Fehler:

Traceback (most recent call last): 
    File "python", line 9 
    else(ValueError): 
     ^
SyntaxError: invalid syntax 

Ich weiß, es ist so, weil Valueerror nur funktioniert (glaube ich) mit Versuch und außer Schleifen aber, warum kann nicht es nicht in das obige Szenario? Ich nehme an, sie würden die gleichen Ergebnisse geben, aber ich weiß nicht alles. Vielleicht kann einer von euch unglaublich schlauen Leuten mir sagen, dass das nicht funktioniert oder eine Alternative. Danke für den Versuch, mir dies zu verdeutlichen :).

Antwort

2

try und except sind eine Form des Steuerflusses. Im Wesentlichen bedeutet es try, um diesen Code auszuführen, except, wenn eine Ausnahme auftritt (wie ValueError) etwas anderes tun.

if und else sind eine andere Form des Kontrollflusses. Zusammen bedeuten sie if eine Bedingung ist wahr, etwas tun; else, etwas anderes tun.

Eine auftretende Ausnahme ist keine Bedingung und daher wäre es nicht sinnvoll, else mit einer Ausnahme wie ValueError zu verwenden. Stattdessen möchten Sie den try/except Block verwenden.

+1

Okay danke für die Klärung der Dinge. – BradTheBrutalitist

3

Der SyntaxError im zweiten Beispiel stammt aus der Tatsache, dass else keine Bedingung benötigt. Das erste Beispiel ist völlig in Ordnung.

Noch besser, halten Sie den Try-Block so kurz wie möglich:

print("What is 1 + 1?") 
while True: 
    try: 
     UserInput = int(input(("Your answer here:")) 
    except ValueError: 
     print("That is not a number. Try again!") 
    else: 
     if UserInput == 2: 
      print("Congratulations you are correct!") 
      break 
     else: 
      print("That is incorrect. Try again!") 
+0

Ich denke, letzte sonst ist überflüssig. – Jacobian

+0

Also sonst kann ValueError nicht drin sein. Denkst du, dass es einfacher wäre, den zweiten Weg oder nicht? – BradTheBrutalitist

+1

@Jacobian: nein ist es nicht – Daniel