Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python 2to3中的eval(input())_Python_Python 2to3 - Fatal编程技术网

python 2to3中的eval(input())

python 2to3中的eval(input()),python,python-2to3,Python,Python 2to3,从Python中: 输入: 将input(prompt)转换为eval(input(prompt)) 在使用Python2几年后,我目前正在尝试学习Python3。有人能解释一下为什么工具在调用input之前插入eval,以及我是否应该在我所有的Python3代码中这样做吗?Python2的旧输入行为已被删除,Python3的当前输入是以前命名的原始输入。原始输入和Python3输入总是返回一个字符串,这与尝试将输入作为表达式计算的输入不同 2to3工具插入了一个eval,因为它无法判断您是否依

从Python中:

输入

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


在使用Python2几年后,我目前正在尝试学习Python3。有人能解释一下为什么工具在调用
input
之前插入
eval
,以及我是否应该在我所有的Python3代码中这样做吗?

Python2的旧输入行为已被删除,Python3的当前输入是以前命名的原始输入。原始输入和Python3输入总是返回一个字符串,这与尝试将输入作为表达式计算的输入不同

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


您不应该使用eval(input()),可能除了在一次性脚本中。没有办法保证eval的安全性。

事实上,我建议您重新检查仍然经常使用的所有旧代码,检查是否可以将它们转换为使用原始输入,必要时可以显式转换为int/float。