繁体   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