gpt4 book ai didi

python - 检查是否可以在 Python 中评估字符串(使用 eval())

转载 作者:太空宇宙 更新时间:2023-11-03 11:49:30 25 4
gpt4 key购买 nike

我知道我可以尝试使用 eval 本身,但我想在 list_comprehensions 或 map 中使用它:

[eval(x) if isevaluable(x) else x for x in some_list]

我这样做的动力:我从 sys.argv 得到参数——可以是 int\float\built-in-constants(尤其是 True、False、None)。我想以一种简单干净的方式将它们全部转换。

[注意:安全评估不是这里的问题(即使它确实被推荐)]

最佳答案

一个明显的解决方案可能适用于您的特定评估字符串,也可能无效。

def isevaluable(s):
try:
compile(s, "bogusfile.py", "exec")
return True
except:
return False

这会编译代码,检查语法错误等。不会捕获您所有的逻辑问题,但它会在将其放入 eval 之前检查程序问题,这可能会导致各种问题。

我想这样做:

def isevaluable(s):
try:
eval(s)
return True
except:
return False

但请记住,然后您将执行您的字符串,这可能会掩盖将其放入列表中的结果。
例如,如果您的字符串是 rm/tmp/cache.txt,这将在您的 isevaluable 中给出肯定结果,在您的 [eval(x) 中给出否定结果...] 因为它在 try 语句中被删除了。

在这种情况下,compile() 是更好的选择。它可能在任何示例中。

关于python - 检查是否可以在 Python 中评估字符串(使用 eval()),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31423864/

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