文字列にブール式があります。例えば。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ます。