Вот четыре простых вызова, утверждайте:
>>> assert 1==2
Traceback (most recent call last):
File "<stdin>", line 1, in ?
AssertionError
>>> assert 1==2, "hi"
Traceback (most recent call last):
File "<stdin>", line 1, in ?
AssertionError: hi
>>> assert(1==2)
Traceback (most recent call last):
File "<stdin>", line 1, in ?
AssertionError
>>> assert(1==2, "hi")
Обратите внимание, что последний не повышает ошибку. Каково различие между вызовом, утверждают с или без круглой скобки, которая вызывает это поведение? Моя практика должна использовать круглую скобку, но вышеупомянутое предлагает, чтобы я не был должен.
Последний assert
выдал бы предупреждение (SyntaxWarning: assertion is always true, perhaps remove parenthes?
), если бы вы запустили его через полный интерпретатор, а не через IDLE. Поскольку assert
является ключевым словом, а не функцией, вы фактически передаете кортеж в качестве первого аргумента и не указываете второй аргумент.
Вспомните, что непустые кортежи оцениваются как True
, а поскольку сообщение assert необязательно, вы, по сути, вызвали assert True
, когда написали assert(1==2, "hi")
.
assert 1 == 2, «привет»
анализируется как assert 1 == 2, «привет»
с «привет» в качестве второго параметра ключевого слова. Следовательно, почему он правильно выдает ошибку.
assert (1 == 2)
анализируется как assert (1 == 2)
, что идентично assert 1 == 2
, поскольку скобки вокруг одного элемент не создает кортеж, если нет конечной запятой, например (1 == 2,)
.
assert (1 == 2, "привет")
анализируется как assert (1 == 2, "привет")
, что не дает ошибки, поскольку непустой tuple (False, "привет")
не является ложным значением, и для ключевого слова нет второго параметра.
Вы не должны использовать круглые скобки, потому что assert
не является функцией в Python - это ключевое слово.