`input`和`raw_input`的区别

10 投票
3 回答
31179 浏览
提问于 2025-04-16 04:37

在一个教程中,我看到提到 inputraw_input 之间是有区别的。我发现他们在 Python 3.0 中改变了这两个函数的行为。那么新的行为是什么呢?

还有为什么在 Python 控制台中,这段代码

x = input()

会报错,但如果我把它放在一个 file.py 文件里运行,就不会了呢?

3 个回答

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

3

input() 和 raw_input() 的区别

raw_input 是用来收集用户输入的字符,并把这些字符当作字符串来处理。也就是说,你输入的内容会被直接当作文本来使用。

而 input() 可就不一样了,它不仅仅是处理数字,还会把任何输入都当作 Python 代码来执行。如果有懂行但心怀不轨的人输入一条 Python 命令,甚至可能会删除文件。所以,建议你使用 raw_input(),然后再用 Python 自带的转换函数把字符串转换成你需要的数据类型。

另外,input() 也不太安全,因为它期待你输入一个有效的 Python 表达式。如果你输入的内容在语法上不正确,就会出现语法错误(SyntaxError)。

19

在 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'
>>> 

所以你可能在解释器中遇到了错误,因为你没有在输入的内容周围加上引号。这是必要的,因为输入的内容会被计算。你是不是遇到了名称错误?

撰写回答