0

我想测试一个字符串是否可以使用内置函数“eval”计算。我想在我的定义中提出一个条件。如果字符串可使用 eval 计算,我希望它产生 true,如果尝试“eval”字符串产生和错误,我希望它产生 false。有什么功能可以帮助我这样做吗?谢谢。

例子:

t="(8+(2-4)"

s="8+(2-4))"

eval(s) 将产生 6

eval(t) 会产生错误

我希望能够在我的定义中使用这两个条件,我期望 eval 表达式中的整数或错误

4

3 回答 3

4

我假设您想在调用 eval() 之前检查语法。您可以尝试ast.parse,如其他答案中所述。

(该答案中给出的示例,以便于参考):

import ast
def is_valid_python(code):
   try:
       ast.parse(code)
   except SyntaxError:
       return False
   return True

>>> is_valid_python('1 // 2')
True
>>> is_valid_python('1 /// 2')
False
于 2013-07-09T04:08:44.823 回答
1
def f(string):
    try:
        return eval(string)
    except:
        return False
于 2013-07-09T04:06:51.550 回答
0

我的直觉说要写一个 try 块:

def checkeval(foo):
    try:
        eval(foo)
    except:
        return False
    return True

证明:

>>> checkeval('(8+(2-4)')
False
>>> checkeval('(8+(2-4))')
True
于 2013-07-09T04:07:23.730 回答