В этой статье мы рассмотрим, как использовать assert
в Python.
В Python assert
используется для проверки истинности условия с
использованием синтаксиса:
assert <condition>
Если условие оценивается как True
, программа продолжает выполнение,
как если бы ничего необычного не произошло. Однако, если условие
оценивается как False
, программа завершается с AssertionError
.
>>> assert True
При выполнении приведенного выше кода ничего не происходит, так как
условие оценивается как True
. В качестве альтернативы условие в
приведенном ниже примере оценивается как False
:
>>> assert False
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AssertionError
Для большей ясности мы можем добавить собственное сообщение об ошибке в вывод утверждения следующим образом:
>>> assert False, "This is a custom assertion message!"
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AssertionError: This is a custom assertion message!
Оператор assert полезен, когда мы хотим проверить, принимает ли переменная в нашем коде правильное значение, и завершить программу, если это не так. Это помогает предотвратить тихие режимы сбоя, которые могут возникнуть, если программа продолжает выполняться с ошибочными значениями, и их может быть сложно отладить.
Вот пример утверждения утверждения с более значимым условием. Предположим, мы хотим убедиться, что для переменной флага, вводимой пользователем, было установлено одно из нескольких правильных значений. В противном случае мы прекратим выполнение программы. Мы можем сделать это следующим образом:
>>> flag = input("Enter a flag (y/n): ")
Enter a flag (y/n): y
>>> assert flag == "y" or flag == "n", "Invalid flag, must be 'y' or 'n'"
В приведенном выше примере пользователь ввел допустимое значение для флага, поэтому ошибок не возникает. Однако в приведенном ниже примере утверждение выдано из-за недопустимого ввода пользователем:
>>> flag = input("Enter a flag (y/n): ")
Enter a flag (y/n): b
>>> assert flag == "y" or flag == "n", "Invalid flag, must be 'y' or 'n'"
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AssertionError: Invalid flag, must be 'y' or 'n'
При использовании таким образом ваш код должен улавливать возникшую ошибку и показывать настраиваемое сообщение об ошибке в качестве вывода для пользователя, чтобы они могли исправить свой ответ. Это имеет огромное количество применений в программах Python, будь то утверждение входных данных для маршрута API или проверка того, что загруженный ресурс содержит правильную информацию.
Еще один важный момент, на который следует обратить внимание, это то,
что когда вы запускаете интерпретатор Python или скрипт Python из
командной строки, можно использовать флаг –O
для запуска программы
без принудительного выполнения каких-либо утверждений. Это
проигнорирует утверждения assert, отключив режим отладки интерпретатора
Python. Будьте осторожны, используя это, поскольку это может привести к
тому, что ваш код будет принимать недопустимые или опасные входные
данные.
об авторе
Эта статья была написана Якобом Стопаком, консультантом по программному обеспечению и разработчиком, стремящимся помочь другим улучшить свою жизнь с помощью кода. Джейкоб является создателем Code Card - удобного инструмента для разработчиков, позволяющего искать, копировать и вставлять общие фрагменты кода.