python输入()没有按预期工作

时间:2014-01-21 06:03:14

标签: python

我是一个python新手。我熟悉循环并从书中试过这个例子

while True:
        s = input('Enter something : ')
        if s == 'quit':
                break
        print('Length of the string is', len(s))
print('Done')

但输出如下

Enter something : ljsdf
Traceback (most recent call last):
  File "trial_2.py", line 2, in <module>
    s = input('Enter something : ')
  File "<string>", line 1, in <module>
NameError: name 'ljsdf' is not defined

5 个答案:

答案 0 :(得分:7)

您必须使用raw_input()(Python 2.x),因为input()等同于eval(raw_input()),因此它将您的输入解析并评估为有效的Python表达式。

while True:
        s = raw_input('Enter something : ')
        if s == 'quit':
                break
        print('Length of the string is', len(s))
print('Done')

注意:

input()不会捕获用户错误(例如,如果用户输入了一些无效的Python表达式)。 raw_input()可以执行此操作,因为它会将输入转换为stringFor futher information, read Python docs

答案 1 :(得分:3)

你想在python2中找到raw_input()

while True:
    s = raw_input('Enter something : ')
    if s == 'quit':
            break
    print 'Length of the string is', len(s)
print 'Done'

input()试图评估(危险地!)你给它的东西

答案 2 :(得分:2)

您的代码在python 3.x中运行良好

但是如果您使用的是python 2,则必须使用raw_input()

输入字符串
while True:
    s = raw_input('Enter something : ')
    if s == 'quit':
        break
    print('Length of the string is', len(s))
print('Done')

答案 3 :(得分:1)

您似乎正在使用Python 2.x,而代码预计将在Python 3.x中运行。

input in Python 2.x不同,

input in Python 3.x评估输入字符串。

答案 4 :(得分:1)

在Python 2.x input()中,根据用户的输入,返回数字,int或float,你也可以输入变量名。

你需要使用:

raw_input('Enter something: ')

引起错误是因为Python认为“ljsdf”是变量的名称,这就是它引发此异常的原因:

NameError: name 'ljsdf' is not defined

因为“ljsdf”未定义为变量。 :d

raw_input()使用起来更安全,然后将输入转换为以下任何其他类型:D