文字列にブール式があります。例えば。20 < 30
. この文字列を解析および評価して返す簡単な方法はありますかTrue
(この場合)。
ast.literal_eval("20 < 30")
動作しません。
これはユーザー定義の文字列ですか、それともあなたが定義しているものですか?
eval
作成している文字列の場合は( )を使用できますがeval("20 < 30")
、文字列がユーザーによって指定された場合は、最初にサニタイズすることをお勧めします...
>>> eval("20<30")
True
ast.literal_eval
(ドキュメントから)「提供される文字列またはノードは、次のPythonリテラル構造のみで構成されている可能性があります:文字列、数値、タプル、リスト、辞書、ブール値、およびなし。」式は、を返す20<30
前に何らかの評価を必要とします。bool
より安全な提案は、literal_eval
に渡す前に、演算子と両側で文字列を分割することeval
です。
import ast
expr = "20 < 30"
operator = "<"
lhs,rhs = map(ast.literal_eval, map(str.strip, expr.split(operator)))
eval("%s %s %s"%(lhs,operator,rhs))
Thing を句でラップすると、try, except
評価時にいくつかの入力エラーがキャッチされlhs,rhs
ます。