在else中捕获异常

时间:2019-05-21 10:21:43

标签: python testing exception

这是测试某些事物是否相等并捕获其他异常的好方法吗?

try:
    # Check for equality
    debug.assert_eq(data, None)
    debug.assert_eq(id, None)
    debug.assert_eq(time, None)
    debug.assert_eq(group, None)

except Exception:
    print("OK")

else:
    raise Exception('None found')

1 个答案:

答案 0 :(得分:1)

您的逻辑介入了。如果要测试其中至少有一个变量不是None,请使用any()

debug.assert(any(v is not None for v in (data, id, time, group)))

any()遍历v is not None for v in (data, id, time, group)生成器表达式,并在遇到True结果时返回True。这意味着如果data不是None,则不会测试其他3个值。但是,如果所有4个值均为None,则any()返回False并且断言测试失败。

我不知道您使用什么框架来测试断言,我假设会有一个.assert()方法。

在捕获断言失败异常时,我将捕获Exception,这太广泛了,会掩盖错误。测试框架将引发特定的异常以发出断言失败的信号,例如内置的AssertionError。如果需要,则捕获该特定异常。