2010-01-19 7 views
13

Ich bin völlig verloren, warum dies nicht funktioniert. Sollte genau funktionieren, oder?"NameError: Name '' ist nicht definiert" nach Benutzereingabe in Python

UserName = input("Please enter your name: ") 
print ("Hello Mr. " + UserName) 
raw_input("<Press Enter to quit.>") 

Ich erhalte diese Ausnahme:

Traceback (most recent call last): 
    File "Test1.py", line 1, in <module> 
    UserName = input("Please enter your name: ") 
    File "<string>", line 1, in <module> 
NameError: name 'k' is not defined 

Es sagt NameError 'k', weil ich 'k' als Eingang bei meinen Tests geschrieben. Ich habe gelesen, dass die print-Anweisung ohne Klammern war, aber das wurde veraltet richtig?

+1

'input' ist äquivalent zu' eval (raw_input (prompt)) '. Sie wollen nur 'raw_input()'. –

+1

input() ist in Ordnung mit Python 3k. @OP welche Version von Python verwendest du? – ghostdog74

+0

@Sergio Dies hängt nicht mit Ihrer Frage zusammen, aber Sie sollten den Anfangsbuchstaben in Kleinbuchstaben für Variablennamen verwenden (z. B. "userName" anstelle von "UserName"). – Roman

Antwort

13

Verwenden Sie nicht input() in 2.x. Verwenden Sie stattdessen raw_input(). Immer.

+0

Wann wurde Input() verwendet? In früheren Versionen? –

+0

Ja. Python-Version 2.x. http://docs.python.org/library/2to3.html # 2to3fixer-input –

+2

'input()' war immer kaputt. 3.x "repariert" es, aber der Schaden wird eine lange Zeit brauchen, um zu heilen. –

11

In Python 2.x "input()" "wertet" was eingegeben wird. (Siehe help(input)). Daher, wenn Sie k eingeben, versucht input() zu finden, was k ist. Weil es nicht definiert ist, löst es die Ausnahme aus.

Verwenden Sie raw_input() in Python 2.x. In 3.0x ist input() festgelegt.

Wenn Sie wirklich verwenden input() wollen (und das ist wirklich nicht zu empfehlen), dann k Variable zitieren wie folgt:

>>> UserName = input("Please enter your name: ") 
Please enter your name: "k" 
>>> print UserName 
k 
0

Die akzeptierte Antwort liefert die richtige Lösung und @ ghostdog74 gibt den Grund für die Ausnahme. Ich dachte, es kann hilfreich sein, um zu sehen, Schritt für Schritt, warum dies wirft eine NameError (und nicht etwas anderes, wie Valueerror):

Wie pro Python 2.7 Dokumentation, input() evaluates, was Sie eingeben, so im Wesentlichen Ihr Programm wird dies:

username = input('...') 
# => translates to 
username = eval(raw_input('...')) 

Nehmen wir an, Eingang bob, dann wird daraus:

username = eval('bob') 

Seit eval() ausführt 'bob', als ob es ein Ausdruck Python waren, Ihr Programm wird dies:

username = bob 
=> NameError 
print ("Hello Mr. " + username) 

Sie konnte es meine Eingabe von „bob“ funktioniert (mit Anführungszeichen), weil dann das Programm zwar gültig ist:

username = "bob" 
print ("Hello Mr. " + username) 
=> Hello Mr. bob 

Sie es, indem Sie durch jeden Schritt ausprobieren können in die Python REPL selbst. Beachten Sie, dass die Ausnahme bereits in der ersten Zeile ausgelöst wird, nicht innerhalb der print-Anweisung.

Verwandte Themen