如标题中所述
我希望
assert 1,2 == (2,3)
举起AssertionError
,但没有举起。
都不
assert 1,2 == 2
有人知道为什么吗?
答案 0 :(得分:3)
assert语法将检查逗号之前的内容,接下来的内容是在声明为False
的情况下显示的内容。
尝试一下:
>>> assert 0,2 == (2,3)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AssertionError: False
您需要做assert (1, 2) == (2, 3), "Assertion failure !"
答案 1 :(得分:1)
这被解析为assert 1
和1 == (2,3)
作为单独的参数。
assert 1
与assert True
您可以尝试一下
assert 0,1 == (0,1)
确实会提出。
答案 2 :(得分:1)
要更详细一点
def func():
assert 1,2 == (2,3)
这是以上函数的dis.dis
输出:
0 LOAD_CONST 1 (1)
2 POP_JUMP_IF_TRUE 16
4 LOAD_GLOBAL 0 (AssertionError)
6 LOAD_CONST 2 (2)
8 LOAD_CONST 4 ((2, 3))
10 COMPARE_OP 2 (==)
12 CALL_FUNCTION 1
14 RAISE_VARARGS 1
>> 16 LOAD_CONST 0 (None)
18 RETURN_VALUE
如您所见,POP_JUMP_IF_TRUE
跳到16,从而完全跳过AssertionError
。而且由于堆栈的顶部是1
,所以它是JUMP
个。