2016-04-05 7 views
0

Ich versuche, eine Ausnahme versuchen in Python zu implementieren, die bei der Eingabe eines Zeichens/Zeichenfolge anstelle eines int, fängt die Ausnahme.Python ValueError Ausnahme - Name "a" ist nicht definiert Fehler

Wenn jedoch die Eingabe des Buchstaben 'a' das Programm abstürzt, der folgende Fehler zurückgegeben:

num = input('Enter integer number: ') File "<string>", line 1, in 
<module> NameError: name 'a' is not defined 

Dies ist mein Code:

if __name__ == '__main__': #main function 
    num = input('Enter integer number: ') 
    try: 
     num = int(num) 
    except ValueError: 
     print "Invalid input." 
+1

Da Sie sich in 'python 2.x' befinden (unter der Annahme, dass' print' ist), versuchen Sie 'raw_input' anstelle von' input' und fügen Sie Ihren Tags nicht [tag: python-3.x] hinzu . – Lafexlos

Antwort

1

Sie versuchen, eine ValueError zu fangen, aber Die Funktion erhöht stattdessen eine NameError. Sie fangen es also nicht. Versuchen Sie:

if __name__ == '__main__': #main function 
    num = input('Enter integer number: ') 
    try: 
     num = int(num) 
    except Exception as e: 
     print "Invalid input: {}".format(e.message) 
+2

Eigentlich ist die Verwendung von "Eingabe" das Problem hier. "input" fungiert in "python 2.x" als "eval" und sollte daher in "raw_input" geändert werden. Wenn int auf char/string geworfen wird, wird ein ValueError ausgelöst, was OP versucht zu erreichen. – Lafexlos

+0

Sie haben Recht. Dann können Sie sagen, dass es mindestens zwei Probleme gibt. Das Ziel des Autors ist es, eine Ausnahmetest-Ausnahme in Python zu implementieren. Also habe ich mir das Problem angeschaut, als ich die Ausnahme gefunden habe. –

1

aus der Dokumentation input() interpretiert die angegebene Eingabe.

https://docs.python.org/2/library/functions.html?highlight=input#input

so, wenn Sie die Eingabe als "a" geben würde, es als String interpretieren und weitergehen. Da Sie den Wert ein geben, erwartet es eine Variable mit dem Namen ein.

Wenn Sie die Benutzereingabe direkt verwenden möchten, wie in den Kommentaren von @Lafexlos empfohlen, verwenden Sie stattdessen raw_input.