【发布时间】:2012-08-28 23:30:23
【问题描述】:
来自 Python 2to3 doc:
input:将
input(prompt)转换为eval(input(prompt))
在使用 Python 2 几年后,我目前正在尝试学习 Python 3。任何人都可以解释为什么该工具在调用 input 之前插入 eval,以及我是否应该在我的所有 Python 3 中这样做代码?
【问题讨论】:
标签: python python-2to3
来自 Python 2to3 doc:
input:将
input(prompt)转换为eval(input(prompt))
在使用 Python 2 几年后,我目前正在尝试学习 Python 3。任何人都可以解释为什么该工具在调用 input 之前插入 eval,以及我是否应该在我的所有 Python 3 中这样做代码?
【问题讨论】:
标签: python python-2to3
python 2 的旧输入行为已被删除,python 3 的当前输入是以前命名的 raw_input。 raw_input 和 python 3 input 总是返回一个字符串,不像 input 试图将输入作为表达式求值。
2to3 工具插入了一个评估,因为它无法判断您是否依赖旧输入自动评估其输入。旧的输入行为被认为是一个错误,因为您几乎可以评估任何有效的 Python 表达式,因此任何使用 input() 的 Python 程序都有一个明显的安全漏洞。转换后,您应该评估 eval 的每次使用,并确定该部分代码是否会接收任何不受信任的用户输入。
你不应该使用 eval(input()),除非在一次性脚本中。没有办法让 eval 安全。
【讨论】: