`assert 1,2 == (2,3)` не вызывает ошибку AssertionError в python3 - PullRequest
0 голосов
/ 22 февраля 2019

Как упомянуто в названии

Я ожидаю, что

assert 1,2 == (2,3)

поднимет AssertionError, но это не так.

также не делает

assert 1,2 == 2

Кто-нибудь знает почему?

Ответы [ 3 ]

0 голосов
/ 22 февраля 2019

Синтаксис 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 !"

0 голосов
/ 22 февраля 2019

Для более подробной информации

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.

0 голосов
/ 22 февраля 2019

Это обрабатывается как assert 1 и 1 == (2,3) как отдельный аргумент.

assert 1 совпадает с assert True

Это можно увидеть, попробовав

assert 0,1 == (0,1) Что делает рейз.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...