5

文字列にブール式があります。例えば。20 < 30. この文字列を解析および評価して返す簡単な方法はありますかTrue(この場合)。

ast.literal_eval("20 < 30")動作しません。

4

3 に答える 3

2

これはユーザー定義の文字列ですか、それともあなたが定義しているものですか?

eval作成している文字列の場合は( )を使用できますがeval("20 < 30")、文字列がユーザーによって指定された場合は、最初にサニタイズすることをお勧めします...

于 2012-05-14T15:58:45.777 に答える
1
>>> eval("20<30")
True
于 2012-05-14T15:56:34.107 に答える
0

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ます。

于 2012-05-14T16:12:11.117 に答える