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