3

来自 Python 2to3 文档

input

转换input(prompt)eval(input(prompt))

在使用 Python 2 几年后,我目前正在尝试学习 Python 3。任何人都可以解释为什么该工具eval在调用之前插入input,以及我是否应该在我的所有 Python 3 代码中这样做?

4

1 回答 1

7

python 2 的旧输入行为已被删除,python 3 的当前输入是以前命名的 raw_input。raw_input 和 python 3 input 总是返回一个字符串,不像 input 试图将输入评估为表达式。

2to3 工具插入了一个评估,因为它无法判断您是否依赖旧输入自动评估其输入。旧的输入行为被认为是一个错误,因为您几乎可以评估任何有效的 Python 表达式,因此任何使用 input() 的 Python 程序都有一个明显的安全漏洞。转换后,您应该评估 eval 的每次使用,并确定该部分代码是否将接收任何不受信任的用户输入。

你不应该使用 eval(input()),除非在一次性脚本中。没有办法使 eval 安全。

于 2012-08-29T00:46:40.157 回答