【问题标题】:eval(input()) in python 2to3python 2to3 中的 eval(input())
【发布时间】:2012-08-28 23:30:23
【问题描述】:

来自 Python 2to3 doc

input:

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

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

【问题讨论】:

    标签: python python-2to3


    【解决方案1】:

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

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

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

    【讨论】:

    • 事实上,我建议您应该回顾所有仍在经常使用的旧代码,并检查您是否可以将它们转换为使用 raw_input,或者根据需要显式转换为 int/floats .
    猜你喜欢
    • 2016-02-19
    • 2014-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多