Python 有条件断言

Python assert with conditions

我 运行 在使用 pytest 编写测试用例时遇到了一个独特的问题 如果我们将测试写成:-

a = 4
b = 5
c = 4

def match_test():
    assert a == (b or c) # (fails with `AssertionError`)

现在如果我们使用常量做同样的事情

def match_test():
    assert a == (4 or 5)  (passes)

但是如果我们将断言分解为:-

def match_test():
    assert a == b or a == c # (passed)

字符串也会发生同样的情况,好奇是否有人可以解释为什么会出现这种独特的行为,PS我是 Pytestassert 语句的新手。

它们不一样。 (4 or 5) 被计算为 4,所以

assert a == (4 or 5)

4 == 4 以来通过。

(b or c) 计算为 5(b 为 5)所以

assert a == (b or c)

4 != 5 以来失败。 assert a == (c or b) 会通过。

assert a == b or a == c

通过,因为 assert 计算整个表达式,True or FalseTrue