Ответ 1
Не используйте input()
в 2.x. Вместо этого используйте raw_input()
. Всегда.
Я полностью потерял, почему это не работает. Должен ли работать точно, правильно?
UserName = input("Please enter your name: ")
print ("Hello Mr. " + UserName)
raw_input("<Press Enter to quit.>")
Я получаю это исключение:
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
Он говорит NameError 'k'
, потому что я написал 'k'
в качестве ввода во время моих тестов. Я читал, что выражение print не было в круглых скобках, но оно было отменено правильно?
Не используйте input()
в 2.x. Вместо этого используйте raw_input()
. Всегда.
В Python 2.x, input()
"оценивает" то, что набирается. (см. help(input)
). Поэтому, когда вы вводите k
, input()
пытается найти, что k
. Поскольку он не определен, он вызывает исключение NameError
.
Используйте raw_input()
в Python 2.x. В 3.0x исправлен input()
.
Если вы действительно хотите использовать input()
(и это действительно нецелесообразно), тогда укажите свою переменную k
следующим образом:
>>> UserName = input("Please enter your name: ")
Please enter your name: "k"
>>> print UserName
k
Принятый ответ дает правильное решение, а @ghostdog74 дает причину исключения. Я понял, что может быть полезно увидеть шаг за шагом, почему это вызывает NameError
(а не что-то другое, например ValueError):
В соответствии с документацией Python 2.7 input()
оценивает, что вы вводите, поэтому по существу ваша программа станет следующей:
username = input('...')
# => translates to
username = eval(raw_input('...'))
Предположим, что ввод bob
, тогда это будет:
username = eval('bob')
Так как eval()
выполняет "bob", как если бы это было выражение Python, ваша программа становится следующей:
username = bob
=> NameError
print ("Hello Mr. " + username)
Вы можете заставить его работать мой ввод "bob" (с кавычками), потому что тогда программа действительно:
username = "bob"
print ("Hello Mr. " + username)
=> Hello Mr. bob
Вы можете попробовать, пройдя каждый шаг в Python REPL самостоятельно. Обратите внимание, что исключение создается в первой строке уже, а не в заявлении печати.