来自Python 2to3文档:
input
:将
input(prompt)
转换为eval(input(prompt))
我目前正在学习Python 3,在使用Python 2几年后。有人能解释一下为什么工具在调用input
之前插入了eval
,以及是否应该在所有Python 3代码中这样做吗?
来自Python 2to3文档:
input
:将
input(prompt)
转换为eval(input(prompt))
我目前正在学习Python 3,在使用Python 2几年后。有人能解释一下为什么工具在调用input
之前插入了eval
,以及是否应该在所有Python 3代码中这样做吗?
Python 2的旧输入行为已被删除,Python 3的当前输入是之前称为raw_input的内容。raw_input和Python 3输入始终返回字符串,而不像input会尝试将输入作为表达式进行评估。
2to3工具插入了eval,因为它无法判断您是否依赖于旧输入自动评估其输入。旧的输入行为被认为是一个错误,因为您可以评估几乎任何有效的Python表达式,因此使用input()的任何Python程序都存在明显的安全漏洞。转换后,您应该评估每个eval的用途,并确定代码的哪些部分将接收到任何不受信任的用户输入。
除了一次性脚本外,您永远不应该使用eval(input())。没有办法使eval变得安全。