Обработка на изключения е способността ви да персонализирате и показвате съобщения за грешки за части от вашата програма, които не работят.
Независимо дали изграждате уебсайт, правите API, модул или друг продукт, използващ Python, способността ви да се справяте ефективно с изключенията ви позволява изрично да посочите причината за грешка.
Тук ще разгледаме как можете да се справите с изключенията в Python.
Как работи обработката на изключения в Python
Когато повдигате изключения, казвате на Python да изведе съобщение всеки път, когато блок код откаже. Изключенията са като да кажеш на някого да опита да вдигне тежест. И ако не могат, трябва да ви уведомят.
За да създадете изключение в Python обаче, ще кажете на Python да се опита да стартира определен блок код. Ако този блок се провали, можете да поискате от Python да вдигне определено изключение за неуспешния код.
Кога трябва да използвате изключения в програмирането на Python?
В повечето случаи можете да маскирате стандартни грешки на Python, като използвате изключения. Но трябва да запазите бдителност, тъй като това може да доведе до проблеми с отстраняването на грешки. Следователно може да ви е трудно да разберете основната причина за евентуална грешка.
Затова трябва да използвате изключения, когато сте тествали достатъчно кода си и сте сигурни, че той работи. В крайна сметка е най-добрата практика да се използват за справяне с потенциални грешки, които могат да възникнат от края на потребителя, а не от самия код.
С други думи, можете да използвате изключенията като инструмент за предупреждение, който да насочва потребителите как да използват вашата програма.
Обработка на изключения от Python
За да се справите с изключенията в Python, първо трябва да увиете кода си в опитайте... освен блок. Понякога може да се наложи да включите a накрая изявление за обработка на по-нататъшни действия, в зависимост от вашите нужди.
Концепцията за кодиране на изключенията на Python обикновено изглежда така:
опитвам:
"код за изпълнение"
с изключение:
"съобщение за грешка"
Както споменахме по-рано, можете също да използвате накрая в блок за изключение. Но кодът, който пишете в a накрая клаузата е независима и работи независимо дали има изключение или не.
По същество е полезно, ако имате друг блок код, който искате да изпълнявате непрекъснато, независимо какво се случва в опитайте... освен блок.
Ето пример:
опитвам:
печат (9 + 6)
с изключение:
print ("съобщение за грешка")
накрая:
печат ("моля, рестартирайте")
Изход:
15
моля, рестартирайте
В горния код, моля, рестартирайте работи непрекъснато, независимо дали има изключение или не.
An друго състояние може да последва и с изключение изявление:
опитвам:
С = 2 + В
с изключение:
print ("Б трябва да бъде дефиниран")
друго:
print (u "Добавено успешно! Резултатът е% s "% (C))
Изход: Б трябва да се дефинира
Сега опитайте това отново с дефинирано "B":
опитвам:
В = 5
С = 2 + В
с изключение:
print ("Б трябва да бъде дефиниран")
друго:
print (u "Добавено успешно! Резултатът е% s "% (C))
Изход: Добавено успешно! Резултатът е 7
Горните примери са нестандартни изключения. Но можете да имате по-изрично изключение, когато комбинирате вградени (дефинирани) изключения с нестандартни:
опитвам:
С = 2 + В
с изключение на NameError като грешка:
print (грешка, ":", "Б трябва да бъде дефиниран, моля")
друго:
print (u "Добавено успешно! Резултатът е% s "% (C))
Изход: име „B“ не е дефинирано: B трябва да бъде дефинирано, моля
Горното изключение първо проверява дали има NameError в опитвам блок. След това отпечатва стандарта NameError първо изключение ("името 'B' не е дефинирано"). И го подкрепя с вашето писмено изключение ("Б трябва да бъде дефиниран, моля").
Свързани: Основни принципи на програмиране Всеки програмист трябва да знае
И ако искате да се справите с верига от изключения, можете също да придружите a опитвам блок с много с изключение изявления. Това е доста удобно, ако вашият опитвам block има потенциал да има много изключения:
опитвам:
В = 5
С = 2 + В
D = поплавък (6)
F = 7/0
с изключение на NameError като грешка:
print (грешка, ":", "Б трябва да бъде дефиниран, моля")
с изключение на ValueError като val:
print (val, ":", "Не можете да конвертирате тези данни")
с изключение на ZeroDivisionError като zeroerr:
print (zeroerr, ":", "Не можете да разделите число на нула")
друго:
print (u "Операцията е успешна! Резултатите са:% s,% s и% s "% (C, D, F))
Изход: деление на нула: Не можете да разделите число на нула
Ами ако разделението е валидно? Например замяна F = 7/0 в горния код с F = 7/5 дава:
Изход: Операцията е успешна! Резултатите са: 7, 6.0 и 1.4
Дефинирани от потребителя изключения в Python
Можете също така да излезете с вашето изключение и да им се обадите по-късно във вашата програма. Това ви позволява да дадете конкретно описание на вашето изключение и да го наименувате, както искате.
Независимо от това, всяко дефинирано от потребителя изключение (пряко или косвено) все още идва от вграденото Изключение клас на Python.
Примерният код по-долу прави препратка към основата Изключение директно чрез обаждане RuntimeError от него:
class connectionError (RuntimeError):
def __init __ (самостоятелно, стойност):
self.value = стойност
опитвам:
повиши връзкаError ("Лошо име на хост")
с изключение на connectionError като грешка:
печат (стойност на грешка)
Изход: Неправилно име на хост
Забележи, че connectionError, в този случай е дефиниран от потребителя клас, който можете да повишите по всяко време, когато имате нужда от него във вашата програма.
Свързани: Ръководството за начинаещи за регулярни изрази с Python
Можете да направите дефинирано от потребителя изключение, като го изведете директно от Изключение базов клас. Изключението по-долу обаче предотвратява изваждането на 5 от 6 и извиква директно изключението от базовия клас:
грешки в класа (Изключение):
мине
клас sixFiveError (грешки):
def __init __ (самостоятелно, стойност, съобщение):
self.value = стойност
self.message = съобщение
опитвам:
рейз sixFiveError (6-5, "Това изваждане не е разрешено")
с изключение на sixFiveError като e:
print ("Възникна грешка:", напр. съобщение)
Изход: Възникна грешка: Това изваждане не е разрешено
На практика можете да използвате изключение, което сте дефинирали по-рано, като го извикате в друга функция. Например можете да създадете floatError което позволява добавянето само на две плувки:
# Първо извикайте основните класове изключения:
грешки в класа (Изключение):
мине
# След това извлечете собствено изключение от базовия клас:
клас FloatError (грешки):
def __init __ (самостоятелно, стойност, съобщение):
self.value = стойност
self.message = съобщение
# Създайте функция за добавяне на два плуващи:
def addTwoFloat (a, b):
if (type (a) и type (b))! = float:
повишаване на FloatError (a + b, "Номерата трябва да са с плаващо число, за да се добавят")
друго:
печат (a + b)
addTwoFloat (4, 7)
Изход: __main __. FloatError: (11, 'Номерата трябва да бъдат плаващи, за да се добавят')
Защото сега сте дефинирали a FloatError клас, Python го издига, ако се опитате да добавите два неплаващи литерала с помощта на addtwoFloat функция.
Можете да отпечатате FloatError клас в същия файл на Python, където сте го създали, за да видите какво се случва:
печат (FloatError)
Изход:
FloatErrorобаче не е вградено изключение на Python. Можете да проверите това, като се обадите FloatError в друг свеж файл на Python, където не сте създали този клас:
печат (FloatError)
Изход: NameError: име 'FloatError' не е дефинирано
Получавате NameError защото Python не го разпознава като стандартно изключение.
Можете да опитате да дефинирате и други класове грешки, за да видите как се играят.
Направете вашите програми на Python по-лесни за ползване с изключения
Има много стандартни изключения в Python. Но можете да определите и вашите. Независимо от това, лекотата на използване на вашата програма зависи до известна степен от това как се справя с различни изключения (независимо дали е дефинирано от потребителя, не е специфично или стандартно).
Изключенията обаче ви позволяват да диктувате как да работи вашата програма, когато потребителите взаимодействат с тях. Ясното и краткото посочване на причината за грешка също така дава на потребителите информация относно това, което правят грешно, а понякога ги насочва в правилната посока.
Оборудвайте се с ноу-хау, за да смачкате всяка грешка на Python по пътя си.
Прочетете Напред
- Програмиране
- Python
- Уроци за кодиране
Idowu е запален по всичко интелигентни технологии и производителност. В свободното си време той си играе с кодиране и превключва на шахматната дъска, когато му е скучно, но също така обича да се откъсва от рутината от време на време. Страстта му да показва на хората пътя към съвременните технологии го мотивира да пише повече.
Абонирайте се за нашия бюлетин
Присъединете се към нашия бюлетин за технически съвети, рецензии, безплатни електронни книги и ексклузивни оферти!
Още една стъпка…!
Моля, потвърдете имейл адреса си в имейла, който току-що ви изпратихме.