Python中的input()函数无法按预期工作

6

我是一名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

2
说句实话:这基本上是 http://stackoverflow.com/q/11295325/748858 的重复,尽管如果你不知道在哪里找可能找不到它... - mgilson
5个回答

11

在 Python 2.x 中,你需要使用 raw_input() 函数。因为 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() 可以做到这一点,因为它将输入转换为 string 类型。想要了解更多信息,请阅读 Python 文档


1
我认为你的笔记有点反了。raw_input()并不是将输入转换为字符串,而是尝试将该字符串评估为代码。 - mhlester
1
我只是引用了Python文档 - Christian Tapia
在Kamodo编辑器中raw_input()不起作用了。同时input()也无法使用。我得到了以下错误提示 > NameError: name 'raw_input' is not defined - ami rt

4

你想在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() 尝试(危险地!)对输入进行求值。


3

您的代码将在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')

2
在Python 2.x中,input()函数旨在根据用户输入返回数字,可以是int或float类型,您还可以输入变量名。
如果您需要使用变量名,请使用:raw_input()
raw_input('Enter something: ')

错误是由于Python认为"ljsdf"是一个变量名,这就是为什么它会引发这个异常:
NameError: name 'ljsdf' is not defined 因为"ljsdf"没有被定义为一个变量。 :D
使用raw_input()更安全,然后再将输入转换为其他类型。 :D

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接