Рубріки: Основи

Оператор assert у Python: як з ним правильно працювати

Дмитро Сімагін

Оператор assert у мові Python виконує роль вбудованої інструкції для налагодження. Він дозволяє перевіряти справжність тверджень під час виконання програми. Якщо умова, вказана в assert, не виконується, то Python викликає помилку AssertionError. Цей механізм корисний при пошуку помилок у коді, а також для забезпечення того, що програма працює відповідно до очікуваних умов.

Як працює оператор assert

Синтаксис оператора assert виглядає наступним чином:

assert condition, message

 

  • condition (умова) — логічний вираз, який має бути істинним.
  • message (повідомлення про помилку) — необов’язковий аргумент, що вказує на текст, який буде виведено при виникненні помилки.

Коли всередині коду виконується assert, він перевіряє умову. Якщо вона є відповідає істині (True), то програма продовжує працювати. Якщо вираз помилковий (False), то програма викликає помилку AssertionError та виводить необов’язкове повідомлення про помилку (якщо воно встановлено в параметрах).

Приклад використання assert у Python:

x = 5
assert x > 0, «Значення x має бути позитивним»

 

У цьому фрагменті коду, якщо x менше або дорівнює 0, то виникне помилка з повідомленням «Значення x має бути позитивним».

Для чого використовувати assert?

1. Для налагодження коду

Оператор assert допомагає програмістам виявляти помилки та проблеми у роботі програми на ранніх етапах розробки. Замість того, щоб самостійно писати інструкції для перевірки умов, можна використовувати assert. Це помітно спрощує та прискорює процес налагодження.

2. Для документування коду

Якщо в коді використовується assert, це також є видом документації, яка показує розробникам, які умови вважаються істинними в ті чи інші моменти виконання програми. Це допомагає працювати з великими проектами, де різні фрагменти коду взаємодіють між собою.

3. Для тестування припущень

За допомогою оператора assert можна тестувати припущення про дані або стан роботи програми. Якщо ці припущення неправильні, то assert допоможе швидко виявити це. Наприклад, якщо функція передбачає, що список не повинен бути порожнім, для перевірки цього можна використовувати assert:

def calculate_average(numbers):
   assert len(numbers) > 0, "Список не повинен бути порожнім"
   return sum(numbers) / len(numbers)

 

4. Щоб забезпечити коректність даних

У деяких ситуаціях assert буває корисним для перевірки відповідності даних певним критеріям. Це може стати в нагоді при роботі з даними, що надходять із зовнішніх джерел.

Запуск та відключення assert у Python

Оператор assert можна вимкнути для підвищення продуктивності. Для цього потрібно запустити інтерпретатор Python із опцією -O (optimize):

python -O my_script.py

 

Наявність у коді цього фрагменту робить так, що оператори assert будуть проігноровані і програма продовжить виконання без них. Подібна можливість може стати в нагоді, якщо 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

Безумовно, assert це потужний інструмент, але його неправильне використання цілком може призвести до помилок. Тому:

  • Не покладайтеся на assert у робочому оточенні: незважаючи на те, що цей оператор можна вимкнути за допомогою прапора -O, його не можна використовувати для виконання обов’язкових перевірок. Краще використовуйте умови або винятки для критично важливих перевірок.
  • Намагайтеся не використовувати assert для перевірки введення користувача: оскільки assert може бути відключений, він краще підходить для внутрішніх перевірок коду, а ось для перевірки введення користувача бажано застосовувати інші методи.
  • Уникайте складних виразів у assert: спрощуйте вирази в цьому операторі, щоб їх було легко розуміти. Наприклад, замість складної умови краще розбити її на кілька тверджень.

Альтернативи assert

Якщо вам знадобилася складніша перевірка чи контроль над помилками, радимо використовувати:

  • Обробку винятків: за допомогою конструкції try-except.
  • Логування: для запису помилок та інформації про стан програми.
  • Юніт-тестування: для автоматичної перевірки функцій.

Приклад з try-except замість assert:

def divide(a, b):
   if b == 0:
     raise ValueError("Дільник не повинен бути нулем")
   return a/b

Як бачите, цей спосіб кращий, коли перевірка не повинна відключатися.

Висновок

Оператор assert — це корисний інструмент для налагодження, документування та контролю коректності програми у Python, особливо в процесі розробки. Правильно використовуючи assert, ви зможете перевіряти припущення про роботу коду, виявляти помилки та зробити налагодження коду простішим.

Останні статті

Більше 8 млрд грн податків. Стільки сплатили резиденти Дія.City в І кварталі 2025 року

Резиденти Дія.City сплатили до бюджету понад 8 млрд грн податків в І кварталі 2025 року.…

18.04.2025

Китайських офісних працівників закликають менше працювати. Це має допомогти місцевій економіці

У Китаї закликають офісних працівників не працювати надто багато — держава сподівається, що вільний час…

18.04.2025

ChatGPT значно покращив пошук місць по фото. Це посилює проблеми конфіденційності

Експерти звертають увагу на тривожну тенденцію: люди все частіше використовують ChatGPT, щоб визначити місцезнаходження, зображене…

18.04.2025

Середовище розробки IntelliJ IDEA оновлено до версії 2025.1

Компанія JetBrains випустила нову версію мультимовного середовища розробки IntelliJ IDEA 2025.1. Оновлена IDE отримала численні…

18.04.2025

Discord впроваджує функцію сканування обличчя для перевірки віку користувачів

Платформа обміну миттєвими повідомленнями Discord впроваджує функцію перевірки віку за допомогою сканування обличчя. Зараз вона…

18.04.2025

Wikipedia випустила спеціальний датасет, щоб відволікти увагу ботів

Wikipedia намагається захистити себе від тисяч різноманітних ботів-скрейперів, які сканують дані цієї платформи для навчання…

18.04.2025