Допустим, у меня есть этот рабочий код:
def check_some_conds(args):
assert (condA(args) or
condB(args))
assert condC(args)
assert condD(args)
return True
(Да, я знаю, что assert
это плохо, но, пожалуйста, потерпите меня на минутку)
Теперь, когда я вызываю эту функцию, я могу (более или менее) получить первое ошибочное утверждение, используя except AssertionError:
и выполнив некоторые действия с модулем трассировки.
Однако это не идеально, потому что:
assert
оптимизирован для Python
- Я не могу указать сообщение об ошибке
- Игра с модулем трассировки в лучшем случае кажется хакерской
- Мне все еще нужно получить логическое возвращаемое значение, поэтому перехват этого значения и последующее изменение возвращаемого значения - это шаблонный код.
Я ищу способ:
- Выполнить несколько условий, в основном независимо друг от друга
- Знание того, что некоторые функции могут быть длинными и должны быть использованы в последний раз (здесь
condD
может занять несколько секунд
- И некоторые из них могут быть асинхронными функциями или просто встроенными вычислениями (
a == b
)
- вернуть логическое значение (необязательно)
- зарегистрируйте сообщение, которое говорит
condD failed
или nor condA or condB succeded
Если это не совсем возможно, пожалуйста, не стесняйтесь предлагать частичные ответы на мою проблему