eval(input()) in python 2to3

5

来自Python 2to3文档:

input:

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

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

1个回答

7

Python 2的旧输入行为已被删除,Python 3的当前输入是之前称为raw_input的内容。raw_input和Python 3输入始终返回字符串,而不像input会尝试将输入作为表达式进行评估。

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

除了一次性脚本外,您永远不应该使用eval(input())。没有办法使eval变得安全。


事实上,我建议您回顾一下所有仍在定期使用的旧代码,并检查是否可以将它们转换为使用raw_input,必要时明确地转换为int / floats。 - Lie Ryan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接