python 2to3中的eval(input())

时间:2012-08-28 23:30:23

标签: python python-2to3

来自Python 2to3 doc

  

input

     

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

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

1 个答案:

答案 0 :(得分:7)

python 2的旧输入行为已被删除,python 3的当前输入是之前名为raw_input的输入。 raw_input和python 3输入总是返回一个字符串,与尝试将输入作为表达式求值的输入不同。

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

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