Оператор assert у Python: як з ним правильно працювати
Оператор assert у мові Python виконує роль вбудованої інструкції для налагодження. Він дозволяє перевіряти справжність тверджень під час виконання програми. Якщо умова, вказана в assert, не виконується, то Python викликає помилку AssertionError. Цей механізм корисний при пошуку помилок у коді, а також для забезпечення того, що програма працює відповідно до очікуваних умов.
Синтаксис оператора assert виглядає наступним чином:
assert condition, message
Коли всередині коду виконується assert, він перевіряє умову. Якщо вона є відповідає істині (True), то програма продовжує працювати. Якщо вираз помилковий (False), то програма викликає помилку AssertionError та виводить необов’язкове повідомлення про помилку (якщо воно встановлено в параметрах).
Приклад використання assert у Python:
x = 5 assert x > 0, «Значення x має бути позитивним»
У цьому фрагменті коду, якщо x менше або дорівнює 0, то виникне помилка з повідомленням «Значення x має бути позитивним».
Оператор assert допомагає програмістам виявляти помилки та проблеми у роботі програми на ранніх етапах розробки. Замість того, щоб самостійно писати інструкції для перевірки умов, можна використовувати assert. Це помітно спрощує та прискорює процес налагодження.
Якщо в коді використовується assert, це також є видом документації, яка показує розробникам, які умови вважаються істинними в ті чи інші моменти виконання програми. Це допомагає працювати з великими проектами, де різні фрагменти коду взаємодіють між собою.
За допомогою оператора assert можна тестувати припущення про дані або стан роботи програми. Якщо ці припущення неправильні, то assert допоможе швидко виявити це. Наприклад, якщо функція передбачає, що список не повинен бути порожнім, для перевірки цього можна використовувати assert:
def calculate_average(numbers): assert len(numbers) > 0, "Список не повинен бути порожнім" return sum(numbers) / len(numbers)
У деяких ситуаціях assert буває корисним для перевірки відповідності даних певним критеріям. Це може стати в нагоді при роботі з даними, що надходять із зовнішніх джерел.
Оператор assert можна вимкнути для підвищення продуктивності. Для цього потрібно запустити інтерпретатор Python із опцією -O (optimize):
python -O my_script.py
Наявність у коді цього фрагменту робить так, що оператори assert будуть проігноровані і програма продовжить виконання без них. Подібна можливість може стати в нагоді, якщо assert використовувався для налагодження, а зараз виконання цих перевірок більше не потрібно.
def divide(a, b): assert b != 0, "Дільник не повинен бути нулем" return a/b
Якщо потрібно, щоб об’єкт знаходився в певному стані, то для перевірки цього можна також використовувати assert:
class BankAccount: def __init__(self, balance): self.balance = balance def withdraw(self, amount): assert amount > 0, "Сума зняття має бути позитивною" assert amount <= self.balance, "Недостатньо коштів" self.balance -= amount
Іноді буває корисно перевірити, чи функція повертає значення в потрібному форматі або діапазоні:
def square_root(x): assert x >= 0, "Число повинно бути невід'ємним" result = x ** 0.5 assert result >= 0, "Результат має бути невід'ємним" return result
Якщо передано негативне значення, з’явиться помилка «Число повинно бути невід’ємним».
Використовується, щоб перевірити, чи змінна має певний тип, наприклад, що змінні є числами або рядками.
def concatenate_strings(a, b): assert isinstance(a, str) and isinstance(b, str), "Обидва аргументи мають бути рядками" return a + b
Якщо аргументи a і b не рядки, програма викине AssertionError з повідомленням «Обидва аргументи мають бути рядками».
Корисно для перевірки, що значення змінної знаходиться у допустимому діапазоні.
temperature = 25 assert 0 <= temperature <= 100, "Температура має бути в діапазоні від 0 до 100"
Якщо значення temperature виходить за межі діапазону, програма викине помилку із зазначеним повідомленням.
Можна використовувати для перевірки, що в структурі даних немає значень, які дублюються.
def add_to_set(existing_set, item): assert item not in existing_set, "Елемент вже існує у безлічі" existing_set.add(item)
Якщо item вже знаходиться в existing_set, з’являється помилка «Елемент вже існує у безлічі».
Безумовно, assert це потужний інструмент, але його неправильне використання цілком може призвести до помилок. Тому:
Якщо вам знадобилася складніша перевірка чи контроль над помилками, радимо використовувати:
Приклад з try-except замість assert:
def divide(a, b): if b == 0: raise ValueError("Дільник не повинен бути нулем") return a/b
Як бачите, цей спосіб кращий, коли перевірка не повинна відключатися.
Оператор assert — це корисний інструмент для налагодження, документування та контролю коректності програми у Python, особливо в процесі розробки. Правильно використовуючи assert, ви зможете перевіряти припущення про роботу коду, виявляти помилки та зробити налагодження коду простішим.
До кінця 2025 року у Китаї планують налагодити масове виробництво нової технології зберігання даних –…
Один з лідерів у галузі штучного інтелекту, компанія OpenAI, планує запустити свою нову мовну модель…
Google тестує інструмент для вайб-кодування під назвою Opal. Поки він доступний користувачам лише в США…
Маркетплейс мобільних застосунків App Store оновив віковий рейтинг для програм. Додано нові рейтингові обмеження та…
Жительку Аризони, яка облаштувала у себе вдома ферму з 90 ноутбуків, допомагаючи північнокорейським ІТ-спеціалістам видавати…
На канал Android Canary, який прийшов на зміну Android Developer Preview і використовується для тестування…