[英]`assert 1,2 == (2,3)` does not raise an AssertionError in python3
如标题中所述
我预计
assert 1,2 == (2,3)
引发AssertionError
但是没有。
也不
assert 1,2 == 2
有人知道为什么吗?
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 !"
这被解析为assert 1
和1 == (2,3)
作为单独的参数。
assert 1
与assert True
相同
您可以尝试一下
assert 0,1 == (0,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
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.