gpt4 book ai didi

python - 如何正确解释一行 python 代码?

转载 作者:太空狗 更新时间:2023-10-30 00:07:10 26 4
gpt4 key购买 nike

我需要执行用户输入的一行python代码。如果它是一个语句我想执行它,但如果它是一个表达式,我希望返回结果并用它做一些花哨的事情。问题是 python 有两个不同的函数,即 execeval

目前我只是尝试评估用户输入的字符串。如果这会引发 SyntaxError,这可能表明该字符串是一条语句,所以我会尝试执行它。

try:
result = eval(command, scope)
except SyntaxError:
# Probably command is a statement, not an expression
try:
exec(command, scope)
except Exception as e:
return command + ' : ' + str(e)
except Exception as e:
return command + ' : ' + str(e)
else:
pass # Some fancy stuff

这感觉相当hacky。是否有更简洁、更 pythonic 的方法来做到这一点?

最佳答案

虽然我认为您现有的代码可能相当 Pythonic(根据“请求宽恕比许可更容易”的原则),但我怀疑最好的替代方法是使用 ast检查字符串中代码的模块:

tree = ast.parse(some_input_string)
if len(tree.body) == 1 and isinstance(tree.body[0], ast.Expr):
result = eval(some_input_string, scope)
else:
exec(some_input_string, scope)
result = None

请注意,一些常用语句实际上是“表达式语句”。因此,像 'do_stuff("args")' 这样的输入字符串将使用上面代码的 eval 分支,而不是 exec 分支.我不认为这会产生任何不利后果,但你永远不知道。

也可以编译已解析的,然后将结果传递给稍后的evalexec 调用。不过,我发现做对非常费力(您需要将 ast.Exprvalue 属性包装在 ast.Expression 中top 分支),所以我选择了更简单(便于阅读和理解)的替代方法,即只传入字符串并让 Python 再次解析它。

关于python - 如何正确解释一行 python 代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23574559/

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