Python:如何判断一个字符串是代表语句还是表达式?

标签 python expression detect

我需要根据输入字符串“s”调用 exec() 或 eval()

如果“s”是一个表达式,在调用 eval() 之后如果结果不是 None 我想打印结果

如果“s”是一条语句,那么只需执行 exec()。如果语句恰好打印了一些东西,那就这样吧。

s = "1 == 2" # user input
# ---
try:
    v = eval(s)
    print "v->", v
except:
    print "eval failed!"
# ---
try:
    exec(s)
except:
    print "exec failed!"

例如,“s”可以是:

s = "print 123"

在这种情况下,应该使用 exec()。

当然,我不想先尝试 eval() ,如果失败就调用 exec()

最佳答案

尝试将其编译为表达式。如果它失败了,那么它一定是一个语句(或者只是无效的)。

isstatement= False
try:
    code= compile(s, '<stdin>', 'eval')
except SyntaxError:
    isstatement= True
    code= compile(s, '<stdin>', 'exec')

result= None
if isstatement:
    exec s
else:
    result= eval(s)

if result is not None:
    print result

关于Python:如何判断一个字符串是代表语句还是表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3876231/

相关文章:

python - 用 Pygame 画抛物线

python - 使用 StreamBlock 时如何解决 Wagtail 循环 block 依赖

javascript - 为什么叫函数表达式而不是函数声明呢?

javascript - 检测输入是被触摸(平板电脑)还是被点击(鼠标)

node.js - 如何使用 AWS Rekognition 服务通过 Node.js 检测人脸

python - Catalina zsh shell 更改破坏了 jupyter 笔记本路径

python - 我想根据相似的属性对元组进行分组

r - 如何组合图例中多个项目的表达式?

c++ - if 语句表达式调用函数,需要测试是否为真

javascript - jQuery - 检测 boolean 值的变化