№35 Инструкция assert / для начинающих
Инструкции assert в Python — это булевы выражения, которые проверяют, является ли условие истинным ( True ). Они определяют факты (утверждения) в программе. Assertion — это проверка, которую можно включить, а затем выключить, завершив тестирование программы.
Возьмем простой пример функции деления. Можно быть уверенным в том, что делитель не должен быть нолем. Это и указывается при тестировании. Разберем этот пример позже.
Что такое Assertion (утверждение)
Assertions (утверждения) — это инструкции, которые «утверждают» определенный кейс в программе. В Python они выступают булевыми выражениями, которые проверяют, является ли условие истинным или ложным. Если оно истинно, то программа ничего не делает и переходит к выполнению следующей строчки кода.
Но если оно ложно, то программа останавливается и возвращает ошибку.
Следующий синтаксис — это базовая структура инструкций утверждения в Python.
Если же нужно добавить сообщение для вывода при ложном условии, то синтаксис будет таким.
Это сообщение позволит лучше понять, почему код не сработал.
Пример assert
Если нужно симулировать или выполнить отладку кода, чтобы узнать, что именно происходит на определенном этапе, то «утверждения» в Python отлично для этого подходят.
Именно инструмент отладки останавливает программу, как только возникает какая-то ошибка. Он также показывает, где именно она произошла.
Утверждения в Python: ключевое слово assert
Ключевое слово assert Python определяется как средство отладки, которое проверяет условие. assert в Python – это основные предположения, которые уверенно утверждают или констатируют факт в программе. Например, при написании функции деления делитель не должен быть равен нулю, и вы утверждаете, что делитель не равен нулю.
Это просто логическое выражение, у которого есть условие или выражение, которое проверяет, возвращает ли условие истинное или ложное значение. Если это правда, программа ничего не делает и переходит к следующей строке кода. Но если оно ложно, возникает исключение AssertionError с необязательным сообщением об ошибке.
Основная задача утверждений – информировать разработчиков о неисправимых ошибках в программе, таких как «файл не найден», и правильно сказать, что утверждения – это внутренняя самопроверка программы. Это наиболее важно для тестирования или обеспечения качества в любой области разработки приложений. Синтаксис ключевого слова assert приведен ниже.
Почему используется утверждение
Это инструмент отладки, и его основная задача – проверить состояние. Если он обнаруживает, что условие истинно, он переходит к следующей строке кода, а если нет, то останавливает все свои операции и выдает ошибку. Указывает на ошибку в коде.
Где используется утверждение в Python
В этом примере показана работа assert с сообщением об ошибке.
Пояснение: В приведенном выше примере мы передали непустой список баллов 2 и пустой список баллов 1 в функцию avg(). Мы успешно получили вывод для списка баллов 2, но после этого мы получили ошибку AssertionError: Список пуст. Условие assert выполняется списком баллов 2 и позволяет программе продолжать работу. Однако оценка 1 не удовлетворяет условию и дает ошибку assert.
В этом примере показана “Ошибка деления на 0” в консоли.
В приведенном выше примере мы инициализировали целочисленную переменную, т.е. x=7, y=0, и попытаемся вывести значение x/y в качестве вывода. Интерпретатор Python сгенерировал исключение во время выполнения из-за ключевого слова assert, которое определило делитель как ноль, а затем отобразило “Ошибка деления на 0” в консоли.
Функция assert в Python
В этом руководстве мы узнаем о ключевом слове assert в python. Он помогает нам отлаживать код. Если вы хотите смоделировать свой код, вы можете использовать в своем коде инструкции assert.
Ниже приведена базовая структура:
Вы также можете отправить информацию с оператором assert для лучшего понимания ошибки кода.
Ниже приведен способ отправки сообщения с помощью assert:
Утверждение Assert
Оператор assert в Python принимает условие, которое должно быть true. Если условие true, это означает, что утверждение значения переменной в порядке, тогда программа будет работать исправно, и будут выполнены следующие операторы. Но если условие false (это означает, что в нашем коде есть ошибка), возникает исключение.
Пример функции, которая возвращает частное от двух чисел
Мы хотим написать функцию, которая будет возвращать частное от двух чисел. Вот код:
Если мы запустим приведенный выше код, то результат будет следующим:
В третьей строке приведенного выше кода вы можете увидеть инструкцию assert. В этой строке проверяется, больше ли значение переменной num 2 0 или нет. Если больше нуля, т.е. условие true, то проблем не возникает, и мы получаем результат соответственно.
Но когда мы вызвали функцию Division() со вторым аргументом 0, тогда условие assert – false. Вот почему возникает AssertionError, и выдается сообщение «Divisor не может быть нулевым», которое мы написали в части сообщения.
Пример с заменой переменной
Рассмотрим следующий код, мы пытаемся найти квадратный корень из уравнения, скажем (b2 – 4ac).
Вот как мы можем использовать оператора assert для отладки и поиска ошибок в нашем коде на этапе тестирования. Вы можете узнать больше о тестировании кода, используя модуль unitest.
Оператор assert в Python: объяснение на примерах
Оператор assert – это встроенный оператор или ключевое слово в Python, используемое для отладки кода. Это своего рода проверка, которая исследует функциональность вашего кода.
В этой статье мы рассмотрим оператор assert в Python и разберем принципы его работы на нескольких примерах.
Синтаксис
Синтаксис использования оператора assert следующий:
Также можно добавить дополнительное сообщение, которое будет выводиться при ошибке. В таком случае синтаксис assert будет следующий:
Примеры
Чтобы разобраться, как пользоваться оператором assert на практике, давайте обсудим несколько примеров.
В assert мы указали условие, что num2 (делитель) не должен быть равен нулю. Данное условие не выполняется, потому что значение num2 равно нулю. Интерпретатор Python выдает ошибку AssertionError вместе с добавленным нами сообщением «The divisor is zero» («Делитель равен нулю»).
Теперь давайте изменим значение num2 и выполним нашу программу снова. На этот раз утверждение assert истинно, так что в этом случае ничего не произойдет. Ошибка не появляется, вместо этого выполняется следующая строка. Таким образом, на экран выведется результат деления — 1.0.
Теперь давайте разберем другой пример. Напишем условие assert для проверки корректности строки.
Можно привести и альтернативный вариант примера со строкой:
Значение переменной val – hello. Это означает, что условие ложно, и программа выведет ошибку AssertionError с нашим комментарием — «The variable value is not equal to Pythonist».
Заключение
Оператор assert – это встроенный оператор в Python, позволяющий отлаживать код. Этот оператор принимает условие и необязательное сообщение, которое выводится, если условие assert ложно. В этом случае инструкция assert выводит AssertionError. Если условие истинно, то ничего не происходит и выполняется следующая строка кода. В этой статье мы подробно объяснили принцип работы оператора assert и разобрали его на примерах.
Грамотное использование assert в Python или прикрой свой з**!
Андрей Волков
Системное, сетевое администрирование +DBA. И немного программист!)) Профиль автора.
В этой статье я собираюсь дать вам представление об использовании assert в Python. Вы научитесь ее применять для автоматического обнаружения ошибок в программах Python. Эта инструкция сделает ваши программы надежнее и проще в отладке.
В этом месте вы, вероятно, заинтересуетесь: «Что такое assert и в чем ее прелесть?» Позвольте дать вам несколько ответов.
По своей сути инструкция Python assert представляет собой средство отладки, которое проверяет условие. Если условие утверждения assert истинно, то ничего не происходит и ваша программа продолжает выполняться как обычно. Но если же вычисление условия дает результат ложно, то вызывается исключение AssertionError с необязательным сообщением об ошибке.
Инструкция assert в Python — пример
Вот простой пример, чтобы дать вам понять, где утверждения assert могут пригодиться. Я попытался предоставить вам некоторое подобие реальной задачи, с которой вы можете столкнуться на практике в одной из своих программ.
Предположим, вы создаете интернет-магазин с помощью Python. Вы работаете над добавлением в систему функциональности скидочного купона, и в итоге вы пишете следующую функцию apply_discount :
Отлично, функция сработала безупречно. Теперь давайте попробуем применить несколько недопустимых скидок. Например, 200%-ную «скидку», которая вынудит нас отдать деньги покупателю:
Вы также можете видеть отчет об обратной трассировке этого исключения и то, как он указывает на точную строку исходного кода, содержащую вызвавшее сбой утверждение. Если во время проверки интернет-магазина вы (или другой разработчик в вашей команде) когда-нибудь столкнетесь с одной из таких ошибок, вы легко узнаете, что произошло, просто посмотрев на отчет об обратной трассировке исключения.
Почему просто не применить обычное исключение?
Теперь вы, вероятно, озадачитесь, почему в предыдущем примере я просто не применил инструкцию if и исключение.
Дело в том, что инструкция assert предназначена для того, чтобы сообщать разработчикам о неустранимых ошибках в программе. Инструкция assert не предназначена для того, чтобы сигнализировать об ожидаемых ошибочных условиях, таких как ошибка «Файл не найден», где пользователь может предпринять корректирующие действия или просто попробовать еще раз.
Инструкции призваны быть внутренними самопроверками (internal selfchecks) вашей программы. Они работают путем объявления неких условий, возникновение которых в вашем исходном коде невозможно. Если одно из таких условий не сохраняется, то это означает, что в программе есть ошибка.
А пока имейте в виду, что инструкция assert — это средство отладки, а не механизм обработки ошибок времени исполнения программы. Цель использования инструкции assert состоит в том, чтобы позволить разработчикам как можно скорее найти вероятную первопричину ошибки. Если в вашей программе ошибки нет, то исключение AssertionError никогда не должно возникнуть.
Давайте взглянем поближе на другие вещи, которые мы можем делать с инструкцией assert, а затем я покажу две распространенные ловушки, которые встречаются во время ее использования в реальных сценариях.
Прежде чем вы начнете применять какое-то функциональное средство языка, всегда неплохо подробнее познакомиться с тем, как оно практически реализуется в Python. Поэтому давайте бегло взглянем на синтаксис инструкции assert в соответствии с документацией Python :
В данном случае выражение1 — это условие, которое мы проверяем, а необязательное выражение2 — это сообщение об ошибке, которое выводится на экран, если утверждение дает сбой. Во время исполнения программы интерпретатор Python преобразовывает каждую инструкцию assert примерно в следующую ниже последовательность инструкций:
В этом фрагменте кода есть две интересные детали.
Распространенные ловушки, связанные с использованием инструкции assert в Python
Прежде чем вы пойдете дальше, есть два важных предостережения, на которые я хочу обратить ваше внимание. Они касаются использования инструкций assert в Python.
Звучит довольно ужасно (и потенциально таковым и является), поэтому вам, вероятно, следует как минимум просмотреть эти два предостережения хотя бы бегло.
Предостережение № 1: не используйте инструкции assert для проверки данных
Это преднамеренное проектное решение, которое используется схожим образом во многих других языках программирования. В качестве побочного эффекта оно приводит к тому, что становится чрезвычайно опасно использовать инструкции assert в виде быстрого и легкого способа проверки входных данных.
Поясню: если в вашей программе утверждения assert используются для проверки того, содержит ли аргумент функции «неправильное» или неожиданное значение, то это решение может быстро обернуться против вас и привести к ошибкам или дырам с точки зрения безопасности.
Давайте взглянем на простой пример, который демонстрирует эту проблему. И снова представьте, что вы создаете приложение Python с интернет-магазином. Где-то среди программного кода вашего приложения есть функция, которая удаляет товар по запросу пользователя.
В этом примере трехстрочной функции есть две серьезные проблемы, и они вызваны неправильным использованием инструкций assert:
Каким образом можно избежать этих проблем? Ответ таков: никогда не использовать утверждения assert для выполнения валидации данных. Вместо этого можно выполнять проверку обычными инструкциями if и при необходимости вызывать исключения валидации данных, как показано ниже:
Предостережение № 2: инструкции assert, которые никогда не дают сбоя
Когда в инструкцию assert в качестве первого аргумента передается кортеж, assert всегда возвращает True и по этой причине выполняется успешно.
Например, это утверждение никогда не будет давать сбой:
Между прочим, именно поэтому вам также всегда следует выполнять быстрый тест «на дым» при помощи своих модульных тестовых случаев. Прежде чем переходить к написанию следующего, убедитесь, что они действительно не срабатывают.
Несмотря на данные выше предостережения, я полагаю, что инструкции assert являются мощным инструментом отладки, который зачастую недостаточно используется разработчиками Python.
Понимание того, как работают инструкции assert и когда их применять, поможет писать программы Python, которые будет легче сопровождать и отлаживать.
Это великолепный навык, который стоит освоить, чтобы прокачать знания Python до более качественного уровня и стать всесторонним питонистом. Мне это позволило сэкономить бесконечные часы, которые приходилось тратить на отладку.






