0

組み込み関数「eval」を使用して文字列が計算可能かどうかをテストしたいと思います。私の定義に条件を付けたいと思います。文字列がevalを使用して計算できる場合はtrueを生成し、文字列を「評価」しようとするとエラーが発生する場合はfalseを生成します。そうするのに役立つ機能はありますか?ありがとう。

例:

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

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

eval(s) は 6 を生成します

eval(t) はエラーを生成します

これらの 2 つの条件を、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 に答える