Python утверждает с и без круглой скобки

Вот четыре простых вызова, утверждайте:

>>> 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")

Обратите внимание, что последний не повышает ошибку. Каково различие между вызовом, утверждают с или без круглой скобки, которая вызывает это поведение? Моя практика должна использовать круглую скобку, но вышеупомянутое предлагает, чтобы я не был должен.

91
задан gaefan 24 June 2010 в 16:59
поделиться

2 ответа

Последний assert выдал бы предупреждение (SyntaxWarning: assertion is always true, perhaps remove parenthes?), если бы вы запустили его через полный интерпретатор, а не через IDLE. Поскольку assert является ключевым словом, а не функцией, вы фактически передаете кортеж в качестве первого аргумента и не указываете второй аргумент.

Вспомните, что непустые кортежи оцениваются как True, а поскольку сообщение assert необязательно, вы, по сути, вызвали assert True, когда написали assert(1==2, "hi").

113
ответ дан 24 November 2019 в 06:47
поделиться

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 - это ключевое слово.

16
ответ дан 24 November 2019 в 06:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: