【问题标题】:Differences between `input` and `raw_input` [duplicate]`input` 和 `raw_input` 之间的区别 [重复]
【发布时间】:2011-04-17 13:58:42
【问题描述】:

在教程中,我读到inputraw_input 之间存在差异。我发现它们在 Python 3.0 中改变了这些函数的行为。新行为是什么?

以及为什么在 python 控制台解释器中

x = input()

发送错误,但如果我将其放入 file.py 并运行它,它不会?

【问题讨论】:

    标签: python


    【解决方案1】:

    在 python 2.x 中,raw_input() 返回一个字符串,input() 在调用它的执行上下文中评估输入

    >>> x = input()
    "hello"
    >>> y = input()
    x + " world"
    >>> y
    'hello world'
    

    在 python 3.x 中,input 已被废弃,以前称为 raw_input 的函数现在是 input。因此,如果您想要旧功能,则必须手动调用 compile 而不是 eval

    python2.x                    python3.x
    
    raw_input()   --------------> input()               
    input()  -------------------> eval(input())     
    

    在 3.x 中,上面的会话是这样的

    >>> x = eval(input())
    'hello'
    >>> y = eval(input())
    x + ' world'
    >>> y
    'hello world'
    >>> 
    

    因此,您可能在解释器中遇到错误,因为您没有在输入周围加上引号。这是必要的,因为它已被评估。您在哪里收到名称错误?

    【讨论】:

    • 这里发生了什么我在控制台 (3.x) 上尝试了你的行,它解释了 x = input() "hello"
    • 我遇到的错误 >>> x = input() Traceback(最近一次调用最后一次):文件“”,第 1 行,在 EOFError:读取一行时出现 EOF
    • @Guillermo,我展示的解释器部分适用于 2.x。我在 3.x 上搞砸了(我根本没怎么玩过),所以我删除了答案的那一部分。
    • 嗯,也许我应该开始学习 python 2.X,我只是想拥有最新的未来学习。但我不想这样卡住,因为太浪费时间了,我想我可以找到另一个教程。
    • @Guillermo,这是我的最终答案。此外,在学习过程中没有什么是浪费时间的。事实证明我对 3.x 的理解是对的,我只是尝试在其中做一些不同的事情。为什么你认为你在浪费时间?
    【解决方案2】:

    input() 与 raw_input()

    raw_input 收集用户输入的字符并将它们显示为字符串。 input() 不仅计算数字,而且将任何输入视为 Python 代码并尝试执行它。知识渊博但怀有恶意的用户可以输入 Python 命令,甚至可以删除文件。坚持 raw_input() 并使用 Python 的内置转换函数将字符串转换为您需要的数据类型。

    还有 input(),不能避免用户错误!它需要一个有效的 Python 表达式作为输入;如果输入在语法上无效,则会引发 SyntaxError。

    【讨论】:

      【解决方案3】:

      很简单:

      1. raw_input() 返回字符串值
      2. input() 返回整数值

      例如:

      1.

      x = raw_input("Enter some value = ")
      print x
      

      输出:

      Enter some value = 123
      '123'
      

      2.

      y = input("Enter some value = ") 
      print y
      

      输出:

      Enter some value = 123
      123
      

      因此,如果我们执行x + x =,它将输出为123123

      如果我们执行y + y =,它将输出为246

      【讨论】:

      • 也许在 python 2.x 上,但不是在 python 3.x 上。 python 3.x 中的 input() 总是返回一个字符串。此外,raw_input() 已从 python 3 中删除
      猜你喜欢
      • 2011-06-22
      • 1970-01-01
      • 2014-08-16
      • 2011-04-08
      • 2012-11-24
      • 2013-06-05
      • 2021-09-29
      • 2020-05-27
      相关资源
      最近更新 更多