Python解析表达式或套件

Python解析表达式或套件,python,parsing,Python,Parsing,我用Python/PySide编写的应用程序将可以使用用户定义的脚本进行自定义。有时,用户可以只输入一个返回值的表达式,有时输入一个完整的脚本(即多个语句,在python中通常称为“suite”)。我不知道他/她将选择这两个选项中的哪一个。无论用户输入什么,它都将被存储在一个字符串中,该字符串将被解析和执行 有没有简单的方法来检查字符串是否包含python表达式或套件?我知道有parser.expr()或parser.suite()或compile(,'expr')或compile(,'eval

我用Python/PySide编写的应用程序将可以使用用户定义的脚本进行自定义。有时,用户可以只输入一个返回值的表达式,有时输入一个完整的脚本(即多个语句,在python中通常称为“suite”)。我不知道他/她将选择这两个选项中的哪一个。无论用户输入什么,它都将被存储在一个字符串中,该字符串将被解析和执行

有没有简单的方法来检查字符串是否包含python表达式或套件?我知道有
parser.expr()
parser.suite()
compile(,'expr')
compile(,'eval')
函数,但对于这些函数,我需要提前知道是否要解析/编译表达式或套件

我可以将解析操作放入try/except和try(如果其中一个过程是正确的,那么它就是正确的),但在我看来,这似乎不是一个可行的解决方案,因为用户脚本可能包含任何其他语法错误,而try/except可能会将这些错误混入我的表达式/套件决策逻辑中

另一种方法是自己“准备”字符串,检查它是否包含分号或换行符(当然是字符串或注释的外部),表明它是一个套件,但我不确定这是否足够健壮


是否有其他更简单的方法来区分字符串中存储的表达式或套件?

< p>因为任何表达式都是有效的套件,但并非所有套件都是有效的表达式,所以我建议您应该尝试<代码> EVA/COD>字符串作为表达式,如果失败,请考虑<代码> Exc> <代码>将其作为一个套件:

try:
    resultValue = eval(text)
except Exception as evalProblem:
    try:
        exec(text)
    except Exception as execProblem:
        print "Problems during eval (%s) and during exec (%s)." % (
          evalProblem, execProblem)
else:
    print "Result of eval was:", resultValue

我看不出有什么问题,因为你担心自己周围逻辑的“混乱”。当然,每次执行用户提供的代码时,用户都会把事情搞砸(考虑包含
os.delete('/path/to/my/important/file')
)的字符串)。但是,除非故意这样做,否则仅仅是一个错误不会“搞乱”任何事情。

请不要在没有提供理由的情况下否决一个问题。