簡體   English   中英

`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語法將檢查逗號前的內容,接下來是在斷言為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 11 == (2,3)作為單獨的參數。

assert 1assert 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM