一个接一个地执行多个条件,同时向用户显示哪一个是第一个失败的,这是一种什么样的蟒蛇方式



假设我有以下工作代码:

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 failednor condA or condB succeded的消息

如果这真的不可能,请随时为我的问题提供部分答案

遍历您的条件并在最后引发错误:

fail = False
for condition in [cond1, cond2, cond3 ...]:
if not condition(args):
print(condition.__name__, "failed")
fail = True
else:
print(condition.__name__, "succeeded")
if fail: raise ...

最新更新