【问题标题】:Python Conditions蟒蛇条件
【发布时间】:2013-07-09 03:58:19
【问题描述】:

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

例子:

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

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

eval(s) 将产生 6

eval(t) 会产生错误

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

【问题讨论】:

  • 可能是try........ except?

标签: python wing-ide


【解决方案1】:

我假设您想在调用 eval() 之前检查语法。你可以试试ast.parse,正如另一个answer中提到的那样。

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

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

【讨论】:

    【解决方案2】:
    def f(string):
        try:
            return eval(string)
        except:
            return False
    

    【讨论】:

      【解决方案3】:

      我的直觉告诉我要写一个 try 块:

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

      证明:

      >>> checkeval('(8+(2-4)')
      False
      >>> checkeval('(8+(2-4))')
      True
      

      【讨论】:

        猜你喜欢
        • 2010-10-27
        • 2010-10-21
        • 2016-05-28
        • 2014-08-01
        • 2021-06-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多