gpt4 book ai didi

python - 为什么要避免 exec() 和 eval()?

转载 作者:IT老高 更新时间:2023-10-28 22:16:27 25 4
gpt4 key购买 nike

我在多个地方多次看到这种情况,但从未找到令人满意的解释来解释为什么会出现这种情况。

所以,希望这里能展示一个。为什么我们(至少,一般来说)不应该使用 exec()eval()

编辑:我看到人们假设这个问题与网络服务器有关——事实并非如此。我可以看到为什么传递给 exec 的未经处理的字符串可能不好。在非 Web 应用程序中是不是很糟糕?

最佳答案

通常有更清晰、更直接的方法来获得相同的效果。如果您构建一个复杂的字符串并将其传递给 exec,则代码难以遵循,也难以测试。

示例:我编写了读取字符串键和值并在对象中设置相应字段的代码。它看起来像这样:

for key, val in values:
fieldName = valueToFieldName[key]
fieldType = fieldNameToType[fieldName]
if fieldType is int:
s = 'object.%s = int(%s)' % (fieldName, fieldType)
#Many clauses like this...

exec(s)

对于简单的情况,该代码并不算太糟糕,但随着新类型的出现,它变得越来越复杂。当有错误时,它们总是在调用 exec 时触发,所以堆栈跟踪并不能帮助我找到它们。最终,我切换到了一个稍微长一点、不太聪明的版本,它明确地设置了每个字段。

代码清晰的第一条规则是代码的每一行都应该易于理解,只需查看其附近的行即可。这就是不鼓励使用 goto 和全局变量的原因。 exec 和 eval 很容易破坏这条规则。

关于python - 为什么要避免 exec() 和 eval()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1933451/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com