【问题标题】:Python Traceback (most recent call last) [duplicate]Python Traceback(最近一次调用最后一次)[重复]
【发布时间】:2016-05-31 08:28:13
【问题描述】:

执行此代码时出现错误:

nameUser=input("What is your name ? ")    
print (nameUser)

错误信息是

Traceback(最近一次调用最后一次): 文件“C:/Users/DALY/Desktop/premier.py”,第 1 行,在 文件“”,第 1 行,在 NameError: 名称 'klj' 未定义

发生了什么事?

【问题讨论】:

  • 以字符串形式输入您的姓名,例如'Tom'。或者,使用raw_input 而不是input
  • python部分版本使用input()作为键盘输入功能,其他版本使用raw_input()。尝试改用raw_input()
  • 是的,它可以与 raw_input() 一起使用;)

标签: python python-2.7


【解决方案1】:

您正在使用 Python 2,input() 函数会尝试计算输入的表达式。因为您输入了一个字符串,Python 将其视为一个名称并尝试对其求值。如果没有使用该名称定义变量,您将收到 NameError 异常。

要解决此问题,在 Python 2 中,您可以使用 raw_input()。这将返回用户输入的字符串,并且不会尝试对其进行评估。

请注意,如果您使用的是 Python 3,input() 的行为与raw_input() 在 Python 2 中的行为相同。

【讨论】:

  • 为什么功能是这样设计的。该函数的目的是只接受输入。需要对输入的内容进行评估。
  • @darth_coder:raw_input() 的目的只是接受输入并将其作为字符串返回。 input() 不同;它评估输入。这就是这两个函数的定义方式。由于raw_input() 在Python 3 中被重命名为input(),并且input() 被完全删除,似乎不值得因名称不佳(恕我直言)input() 函数引起的混乱。它有什么目的?如果你想执行用户输入是一个明显的应用程序。
  • @mhwake 很好,但我想了解 input 函数背后的设计语义。我仍然对评估输入的确切含义感到困惑。
  • @darth_coder: 在 Python 2 中 input() 等价于 eval(raw_input()),这就是“评估输入”的意思。阅读eval() 所做的更多细节。正如我所建议的,input() 存在的一个原因是您可以轻松评估用户输入。如果这不是一个令人满意的解释,那么我认为您的问题可以简化为“eval() 的目的是什么?”因为这最终会发生。
【解决方案2】:

在 Python2 中,input 被计算,input() 等价于 eval(raw_input())。当您输入 klj 时,Python 会尝试评估该名称并引发错误,因为该名称未定义。

在 Python2 中使用raw_input 从用户那里获取字符串。

演示 1:klj 未定义:

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

演示 2:klj 已定义:

>>> klj = 'hi'
>>> input()
klj
'hi'

演示3:使用raw_input获取字符串:

>>> raw_input()
klj
'klj'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-08-19
    • 2020-03-24
    • 1970-01-01
    • 1970-01-01
    • 2022-01-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多