У меня есть условия в строках (в обозначении состояния питона), например. например: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, похоже, вызывает исключение NameError-Exception без TRYING, чтобы закончить синтаксический анализ всего уравнения.
Вы знаете ЛЮБОЙ модуль/библиотеку в Python, который пытается решить такие условия?
Спасибо!
Спасибо за ваши ответы. Кажется, я не очень хорошо объяснил это. Я не хочу возвращать False в случае NameError - я хочу, чтобы условие оценивалось, если оно МОЖЕТ быть оценено. И действительно, это могло бы быть, независимо от того, определена ли переменная или нет.
Его следует вычислить в математическом смысле, то есть 0 *and* ANYTHING
ВСЕГДА будет ложным. То же самое относится и к 1 *OR* ANYTHING
-> ВСЕГДА даст ИСТИННУЮ, независимо от того, что ..
И я бы хотел, чтобы это работало и для вернувшихся условий. Вы, как человек хотел бы также сказать, что NO_MATTER_WHAT && 0
дает 0. Даже если анализатор будет немедленно прекратить после просмотра NO_MATTER_WHAT
не определен ...
LHS выражения оценивается сначала из-за SCE. Таким образом, он вернет 'NameError' –
. Я думаю, что это значит, что компиляторы .. интерпретаторы должны работать .. то есть поднять исключение NameError-Exception без TRYING, чтобы закончить синтаксический анализ –
Как насчет модификации строки, так что код в строке проверяет, является ли переменная существует, прежде чем пытаться оценить переменную, например, 'eval (« (foo »в locals() или« foo »в globals()) и foo и 0") '? –