【问题标题】:Python input errorPython输入错误
【发布时间】:2015-11-05 22:38:35
【问题描述】:

我在 Mac OSX 10.9.5m 上运行 python 2.7.10,但它不工作。代码如下:

# YourName.py
name = input("What is your name?\n")
print("Hi, ", name)

这是错误:

Python 2.7.10 (v2.7.10:15c95b7d81dc, May 23 2015, 09:33:12) 
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "copyright", "credits" or "license()" for more information.
>>> ================================ RESTART ================================
>>> 
What is your name?
Ella
Traceback (most recent call last):
  File "/Users/CentCom/Downloads/code/ch01/YourName.py", line 2, in <module>
    name = input("What is your name?\n")
  File "<string>", line 1, in <module>
NameError: name 'Ella' is not defined
>>> 

【问题讨论】:

  • 您似乎正在尝试在 Python 2 上使用 Python 3 语法。您可能想要获得 Python 3 解释器,或者使用 Python 2 学习资料。
  • @user2357112 这些是 python 2.7 中的有效语法...
  • @DavidZemens:当然,如果你想打印一个元组。我怀疑其意图是打印一个元组。
  • @user2357112 我不是在猜测 OP 的意图。 She's given the syntax valid in python 2.7 ,无论你在特定情况下会做什么都无关紧要。
  • @DavidZemens:这有什么不相关的?目标不仅仅是让程序停止产生异常;目标是使程序正确。如果打印语法没有改变,那么程序就不太可能是正确的。当然,这是一个非常轻微的推测,但与推测问题中的错误是 NameError,而不是解释器启动消息的程度差不多。就问题向提问者发出警告比不发出警告要有用得多。

标签: python input


【解决方案1】:

在 python 2.7.1 中使用raw_input

name = raw_input("What is your name?\n")

否则,您必须依靠用户足够了解才能输入带引号的字符串。比如"David",或者输入试图评估一个名称(变量/对象/等),如果范围内没有这样的名称,你会得到错误。

或者,使用异常处理:

name = input("What is your name?\n")
try:
    print("Hi, ", name)
except NameError, e:
    print("Please enclose your input with quotes")

【讨论】:

  • Python 3 删除了input 函数,然后将raw_input 重命名为input
  • @ppperry OP 没有使用 Python 3
【解决方案2】:

对于您使用的 Python 版本,您应该使用 raw_input 而不是 input

你可以更改这行代码:

name = input("What is your name?\n")

对此:

name = raw_input("What is your name?\n")

当您使用 Python 2 时,最好只使用 raw_input。当您使用input 时,Python 将始终尝试“评估”您输入的表达式。

这里解释了为什么使用input 对 Python 2 不利:

因此,如果您输入 5,它将返回数字 5(Python 中的int)。

但是如果你输入 bob,它会认为你给 Python 一个叫做 bob 的“变量”来求值,但是 bob 并没有在你的程序中定义为变量。这个例子实际上给出了你得到的错误:

NameError: name 'bob' is not defined

在 Python 中,如果你输入一个不存在的变量,那就是你得到的错误。看看我做的这个例子:

我尝试在不给 d 赋值的情况下打印变量 d:

>>> d
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'd' is not defined

因此,如果您想将 bob 作为字符串提供给您的输入,input 期望您提供 bob 引号以使其成为像这样的有效字符串:“bob”。为了避免这一切, raw_input 是正确的方法。

如果您决定使用 Python 3,Python 3 会将 raw_input 替换为 input。但它的行为与 Python 2 的 raw_input 完全一样。

祝你编程好运!


这里是关于 raw_input 的文档:

https://docs.python.org/2/library/functions.html#raw_input

【讨论】:

    【解决方案3】:

    Input 尝试评估给定字符串是否为程序。 对于单独的字符串,请使用raw_input。或者您必须引用输入时的字符串,以允许 python 将其解释为字符串。 例如:

    "Ella"
    

    【讨论】:

      【解决方案4】:

      获取用户输入的 Python 3.X 语法

      name = input("What is your name?\n")

      用于获取用户输入的 Python 2.X 语法

      name = raw_input("What is your name?\n")

      【讨论】:

        猜你喜欢
        • 2014-11-03
        • 1970-01-01
        • 2014-10-17
        • 2012-09-08
        • 1970-01-01
        • 1970-01-01
        • 2022-12-18
        • 2016-01-22
        • 2015-10-22
        相关资源
        最近更新 更多