`assert 1,2 == (2,3)` 不会在 python3 中引发 AssertionError
`assert 1,2 == (2,3)` does not raise an AssertionError in python3
如题所述
我期待
assert 1,2 == (2,3)
提出 AssertionError
但它没有提出。
也没有
assert 1,2 == 2
有人知道为什么吗?
这被解析为 assert 1
和 1 == (2,3)
作为单独的参数。
assert 1
等同于 assert True
你可以通过尝试看到这个
assert 0,1 == (0,1)
确实加注了。
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 !"
更多细节
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
s.
如题所述
我期待
assert 1,2 == (2,3)
提出 AssertionError
但它没有提出。
assert 1,2 == 2
有人知道为什么吗?
这被解析为 assert 1
和 1 == (2,3)
作为单独的参数。
assert 1
等同于 assert True
你可以通过尝试看到这个
assert 0,1 == (0,1)
确实加注了。
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 !"
更多细节
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
s.