Дотепер ми досліджували базовий Python від набору 1 до 4 ( Набір 1 | Набір 2 | Набір 3 | Набір 4 ).
У цій статті ми обговоримо, як обробляти винятки в Python за допомогою операторів try, osim і finally за допомогою відповідних прикладів.
Помилка в Python може бути двох типів, тобто. Синтаксичні помилки та винятки . Помилки - це проблеми в програмі, через які програма припиняє виконання. З іншого боку, винятки виникають, коли відбуваються деякі внутрішні події, які змінюють нормальний хід програми.
Різні типи винятків у python:
У Python є кілька вбудованих винятків Python, які можна викликати, коли під час виконання програми виникає помилка. Ось деякі з найпоширеніших типів винятків у Python:
- Синтаксична помилка: Цей виняток виникає, коли інтерпретатор стикається з синтаксичною помилкою в коді, такою як неправильно написане ключове слово, відсутня двокрапка або незбалансована кругла дужка.
- TypeError : Цей виняток виникає, коли операцію або функцію застосовують до об’єкта неправильного типу, наприклад додавання рядка до цілого числа.
- NameError : Цей виняток виникає, коли ім’я змінної або функції не знайдено в поточній області.
- IndexError : Цей виняток виникає, коли індекс виходить за межі діапазону для списку, кортежу чи інших типів послідовностей.
- KeyError : Цей виняток виникає, коли ключ не знайдено в словнику.
- ValueError : Цей виняток виникає, коли функція або метод викликається з недійсним аргументом або введенням, наприклад, намагаючись перетворити рядок на ціле число, коли рядок не представляє дійсне ціле число.
- AttributeError : Цей виняток виникає, коли атрибут або метод не знайдено в об’єкті, наприклад, при спробі отримати доступ до неіснуючого атрибута екземпляра класу.
- IOError : Цей виняток виникає, коли операція введення/виведення, наприклад читання або запис файлу, не вдається через помилку введення/виведення.
- ZeroDivisionError : Цей виняток виникає, коли робиться спроба поділити число на нуль.
- ImportError : Цей виняток виникає, коли оператор імпорту не може знайти або завантажити модуль.
Це лише кілька прикладів багатьох типів винятків, які можуть виникати в Python. Важливо правильно обробляти винятки у вашому коді, використовуючи блоки try-except або інші методи обробки помилок, щоб витончено обробляти помилки та запобігати збою програми.
Різниця між синтаксичною помилкою та винятками
Синтаксична помилка: Як випливає з назви, ця помилка викликана неправильним синтаксисом у коді. Це призводить до припинення програми.
приклад:
У коді є синтаксична помилка. The ' if'> після оператора слід поставити двокрапку (:>), і ' print'> оператор має бути з відступом усередині ' if'> блокувати.
Python3
як перетворити ціле число на рядок у java
amount>=> 10000> if>(amount>>2999>)> print>(>'You are eligible to purchase Dsa Self Paced'>)> |
>
>
Вихід:

Винятки: Винятки виникають, коли програма синтаксично правильна, але код призводить до помилки. Ця помилка не зупиняє виконання програми, але змінює нормальний хід програми.
приклад:
Тут у цьому коді a s ми ділимо «знаки» на нуль, тому виникне помилка, відома як Помилка ZeroDivisionError
Python3
marks>=> 10000> a>=> marks>/> 0> print>(a)> |
>
>
Вихід:

У наведеному вище прикладі виникла помилка ZeroDivisionError, коли ми намагаємося поділити число на 0.
Примітка: Exception є базовим класом для всіх винятків у Python. Ви можете перевірити ієрархію винятків тут .
приклад:
1) TypeError: цей виняток виникає, коли операція або функція застосована до об’єкта неправильного типу. Ось приклад:
Тут а 'TypeError' виникає, оскільки обидва типи даних є різними, які додаються.
Python3
x>=> 5> y>=> 'hello'> z>=> x>+> y> |
>
>
output: Traceback (most recent call last): File '7edfa469-9a3c-4e4d-98f3-5544e60bff4e.py', line 4, in z = x + y TypeError: unsupported operand type(s) for +: 'int' and 'str'>
спробуйте блок catch, щоб вирішити це:
Код намагається додати ціле число ( ' x'> ) і рядок ( ' y'> ) разом, що не є допустимою операцією, і це призведе до появи a ' TypeError'> . Код використовував a ' try'> і ' except'> заблокувати, щоб перехопити цей виняток і надрукувати повідомлення про помилку.
Python3
x>=> 5> y>=> 'hello'> try>:> >z>=> x>+> y> except> TypeError:> >print>(>'Error: cannot add an int and a str'>)> |
>
>Вихід
Error: cannot add an int and a str>
Оператор Try and Except – перехоплення винятків
Інструкції Try і Except використовуються для перехоплення та обробки винятків у Python. Інструкції, які можуть викликати винятки, зберігаються всередині речення try, а оператори, які обробляють виняток, записуються всередині речення osim.
приклад: Тут ми намагаємося отримати доступ до елемента масиву, індекс якого знаходиться поза межами, і обробити відповідний виняток.
Python3
a>=> [>1>,>2>,>3>]> try>:> >print> (>'Second element = %d'> %>(a[>1>]))> >print> (>'Fourth element = %d'> %>(a[>3>]))> except>:> >print> (>'An error occurred'>)> |
>
>Вихід
Second element = 2 An error occurred>
У наведеному вище прикладі оператори, які можуть спричинити помилку, розміщені всередині оператора try (у нашому випадку другий оператор print). Другий оператор друку намагається отримати доступ до четвертого елемента списку, якого немає, і це викликає виняток. Цей виняток потім перехоплюється оператором osim.
Перехоплення конкретного винятку
Інструкція try може мати більше ніж одну пропозицію, щоб вказати обробники для різних винятків. Зверніть увагу, що буде виконано щонайбільше один обробник. Наприклад, ми можемо додати IndexError у наведений вище код. Загальний синтаксис для додавання конкретних винятків такий:
try: # statement(s) except IndexError: # statement(s) except ValueError: # statement(s)>
приклад: Перехоплення конкретних винятків у Python
рядок списку java
Код визначає функцію ' fun(a)'> що обчислюєb>на основі вхідних данихa>. Якщоa>менше 4, він намагається поділити на нуль, викликаючи a ' ZeroDivisionError'> . Код викликаєfun(3)>іfun(5)>всередині блоку try-except. Він обробляєZeroDivisionError>дляfun(3)>і відбитки Помилка ZeroDivisionError виникла та оброблена. The ' NameError'> блок не виконується, оскільки немає ' NameError'> винятки в коді.
Python3
def> fun(a):> >if> a <>4>:> >b>=> a>/>(a>->3>)> >print>(>'Value of b = '>, b)> > try>:> >fun(>3>)> >fun(>5>)> except> ZeroDivisionError:> >print>(>'ZeroDivisionError Occurred and Handled'>)> except> NameError:> >print>(>'NameError Occurred and Handled'>)> |
>
>Вихід
ZeroDivisionError Occurred and Handled>
Якщо ви прокоментуєте рядок fun(3), вихід буде
NameError Occurred and Handled>
Вихідні дані вище є такими, тому що як тільки python намагається отримати доступ до значення b, виникає NameError.
Спробуйте з реченням Else
У Python ви також можете використовувати пропозицію else в блоці try-except, який має бути присутнім після всіх пропозицій, крім. Код потрапляє в блок else, лише якщо пропозиція try не викликає винятку.
Спробуйте з реченням else
Код визначає функцію AbyB(a, b)> що обчислюєc>як ((a+b) / (a-b)) і обробляє потенціалZeroDivisionError>. Він друкує результат, якщо немає помилки ділення на нуль. Дзвінок AbyB(2.0, 3.0)> обчислює та друкує-5.0>, під час дзвінка AbyB(3.0, 3.0)> намагається поділити на нуль, в результаті чого a ZeroDivisionError> , який спійманий і a/b призводить до 0 друкується.
Python3
def> AbyB(a , b):> >try>:> >c>=> ((a>+>b)>/> (a>->b))> >except> ZeroDivisionError:> >print> (>'a/b result in 0'>)> >else>:> >print> (c)> AbyB(>2.0>,>3.0>)> AbyB(>3.0>,>3.0>)> |
>
>
Вихід:
-5.0 a/b result in 0>
Нарешті ключове слово в Python
Python надає ключове слово нарешті , який завжди виконується після блоків try і крім. Останній блок завжди виконується після нормального завершення блоку спроби або після завершення блоку спроби через певний виняток.
Синтаксис:
try: # Some Code.... except: # optional block # Handling of exception (if required) else: # execute if no exception finally: # Some code .....(always executed)>
приклад:
Код намагається виконати цілочисельне ділення на нуль, що призводить до a ZeroDivisionError> . Він ловить виняток і друкує Не можна ділити на нуль. Незалежно від винятку,finally>блок виконується та друкується Це завжди виконується.
Python3
try>:> >k>=> 5>/>/>0> >print>(k)> except> ZeroDivisionError:> >print>(>'Can't divide by zero'>)> finally>:> >print>(>'This is always executed'>)> |
>
>
структура даних
Вихід:
Can't divide by zero This is always executed>
Створення винятку
The підняти заяву дозволяє програмісту примусово викликати певний виняток. Єдиний аргумент у raise вказує на виняток, який потрібно викликати. Це має бути або екземпляр винятку, або клас винятку (клас, який походить від Exception).
Цей код навмисно викликає aNameError>з повідомленням привіт використовуючиraise>заява в межах atry>блокувати. Потім він ловитьNameError>виняток, відбитки Виняток, і повторно викликає той самий виняток, використовуючиraise>. Це демонструє, як винятки можуть бути викликані та оброблені в Python, що дозволяє створювати власні повідомлення про помилки та подальше поширення винятків.
Python3
try>:> >raise> NameError(>'Hi there'>)> except> NameError:> >print> (>'An exception'>)> >raise> |
>
>
Вихід наведеного вище коду буде просто надруковано як виняток, але помилка виконання також виникне в останньому через оператор raise в останньому рядку. Отже, вихід у вашому командному рядку виглядатиме так
Traceback (most recent call last): File '/home/d6ec14ca595b97bff8d8034bbf212a9f.py', line 5, in raise NameError('Hi there') # Raise Error NameError: Hi there> Переваги обробки винятків:
- Покращена надійність програми : належним чином обробляючи винятки, ви можете запобігти збою вашої програми або видачі неправильних результатів через несподівані помилки або введення.
- Спрощена обробка помилок : Обробка винятків дозволяє відокремити код обробки помилок від основної логіки програми, полегшуючи читання та підтримку вашого коду.
- Код очищувача: Завдяки обробці винятків ви можете уникнути використання складних умовних операторів для перевірки помилок, що призведе до чистішого та читабельнішого коду.
- Простіше налагодження : Коли виникає виняткова ситуація, інтерпретатор Python друкує зворотне трасування, яке показує точне місце, де сталася виняткова ситуація, що полегшує налагодження вашого коду.
Недоліки обробки винятків:
- Накладні витрати на продуктивність: Обробка винятків може бути повільнішою, ніж використання умовних операторів для перевірки помилок, оскільки інтерпретатор повинен виконувати додаткову роботу, щоб перехопити та обробити винятки.
- Підвищена складність коду : Обробка винятків може зробити ваш код більш складним, особливо якщо вам потрібно обробляти кілька типів винятків або реалізувати складну логіку обробки помилок.
- Можливі ризики безпеки: Неправильно оброблені винятки потенційно можуть виявити конфіденційну інформацію або створити вразливі місця у системі безпеки у вашому коді, тому важливо обробляти винятки обережно та уникати розкриття забагато інформації про вашу програму.
Загалом, переваги обробки винятків у Python переважують недоліки, але важливо використовувати її розумно й обережно, щоб підтримувати якість коду та надійність програми.
Цю статтю надав Нікіл Кумар Сінгх (nickzuck_007)