[英]`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.