我在字符串中有条件(在python条件表示法中),例如像这样:
my_str = "0 and (not (1 and 0) or B_undefined_variable)"
我想计算条件结果(在数学意义上) . 我正在使用 eval
(不用担心,我知道它是邪恶的;-)) .
my_result = eval(my_str)
我发现,它甚至可以在B被用作字母而不被定义为变量时起作用,因为 0 and ANYTHING
总是为假 .
现在,当我这样做时,反之亦然:
eval("Some_Undefined_Var and 0")
它停止工作 . 所以eval似乎提出了一个没有TRYING的NameError-Exception来完成整个方程的解析 .
你知道Python中的任何模块/库确实试图解决这些问题吗?
谢谢!
谢谢你的回答 . 我似乎没有很好地解释它 . 我不希望在NameError的情况下返回False - 我想要评估条件,如果它可以被评估 . 事实上,无论变量是否定义,它都可以 .
它应该在数学意义上计算,即 0 *and* ANYTHING
总是假的 . 这同样适用于 1 *OR* ANYTHING
- >无论如何,总是会产生真实的......
而且我也希望它能够恢复原状 . 你作为一个人也会说, NO_MATTER_WHAT && 0
给出了0.即使解析器在看到 NO_MATTER_WHAT
后没有定义也会立即退出...
1 回答
如果您了解
eval
的危险并且只想为未定义的变量返回特殊值(例如9999),那么您可以自定义eval
使用的字典:我能想到的唯一另一种选择是为你正在寻找的使用
and
逻辑的表达式实现一个解析器:不是很重要,但我要说它需要几十行代码 .