Как да се справим с изключенията в Python

Как да се справим с изключенията в Python

Обработката на изключения е вашата способност да персонализирате и показвате съобщения за грешки за части от вашата програма, които не работят.





Независимо дали изграждате уебсайт, правите API, модул или друг продукт, използвайки Python, способността ви да се справяте ефективно с изключенията ви позволява изрично да посочите причината за грешка.





Тук ще разгледаме как можете да се справите с изключенията в Python.





Как работи обработката на изключения в Python

Когато издигате изключения, вие казвате на Python да изведе съобщение, когато блок код не успее. Работата с изключения е като да кажете на някого да се опита да вдигне тежест. И ако не могат, трябва да ви уведомят.

За да повдигнете изключение в Python обаче, ще кажете на Python да се опита да изпълни определен блок код. Ако този блок се провали, тогава можете да помолите Python да повдигне определено изключение към неуспешния код.



Кога трябва да използвате изключения при програмиране на Python?

В повечето случаи можете да маскирате стандартни грешки в Python, като използвате изключения. Но трябва да останете бдителни, тъй като това може да причини проблеми с отстраняването на грешки. Следователно може да ви е трудно да разберете основната причина за евентуална грешка.

Затова трябва да използвате изключения, когато сте тествали достатъчно кода си и сте сигурни, че той работи. В крайна сметка най -добрата практика е да ги използвате за справяне с потенциални грешки, които могат да възникнат от края на потребителя, а не от самия код.





С други думи, можете да използвате изключения като инструмент за предупреждение, за да насочите потребителите как да използват вашата програма.

Работа с изключения на Python

За да се справите с изключенията в Python, първо трябва да увиете кода си в пробвай ... освен блок. Понякога може да се наложи да включите a най -накрая декларация за по -нататъшни действия, в зависимост от вашите нужди.





Концепцията за кодиране на изключенията на Python обикновено изглежда така:

try:
'code to be executed'
except:
'error message'

Както бе споменато по -рано, можете също да използвате най -накрая в блок за изключения. Но кодът, който пишете в a най -накрая клаузата е независима и се изпълнява независимо дали има изключение или не.

По същество той е полезен, ако имате друг блок код, който искате да изпълнявате непрекъснато, независимо от това, което се случва в пробвай ... освен блок.

Ето един пример:

try:
print(9+6)
except:
print('error message')
finally:
print('please restart')
Output:
15
please restart

В горния код, моля рестартирайте работи непрекъснато, независимо дали има изключение или не.

Ан иначе състояние може също да последва с изключение изявление:

try:
C = 2 + B
except:
print('B needs to be defined')
else:
print(u'Added successfully! The result is %s'%(C))
Output: B needs to be defined

Сега опитайте отново с определено „B“:

try:
B = 5
C = 2 + B
except:
print('B needs to be defined')
else:
print(u'Added successfully! The result is %s'%(C))
Output: Added successfully! The result is 7

Горните примери са нестандартни изключения. Но можете да имате по-явно изключение, когато комбинирате вградени (дефинирани) изключения с нестандартни:

try:
C = 2 + B
except NameError as err:
print(err, ':', 'B needs to be defined, please')
else:
print(u'Added successfully! The result is %s'%(C))
Output: name 'B' is not defined : B needs to be defined, please

Горното изключение първо проверява дали има Грешка в името в опитвам блок. След това отпечатва стандарта Грешка в името първо изключение ('име' B 'не е дефинирано'). И го поддържа с вашето писмено изключение („B трябва да бъде определено, моля“).

Свързани: Основни принципи на програмиране, които всеки програмист трябва да знае

как да съживим литиево-йонната батерия на лаптопа

И ако искате да се справите с верига от изключения, можете също да придружите a опитвам блок с много с изключение изявления. Това е доста удобно, ако имате опитвам блок има потенциал да има много изключения:

try:
B = 5
C = 2 + B
D = float(6)
F = 7/0
except NameError as err:
print(err,':', 'B needs to be defined, please')
except ValueError as val:
print(val,':', 'You can't convert that data')
except ZeroDivisionError as zeroerr:
print(zeroerr,':', 'You can't divide a number by zero')
else:
print(u'Operation successfull! The results are: %s, %s, and %s'%(C, D, F))
Output: division by zero : You can't divide a number by zero

Ами ако разделението е валидно? Например подмяна F = 7/0 в горния код с F = 7/5 дава:

Output: Operation successfull! The results are: 7, 6.0, and 1.4

Потребителски изключения в Python

Можете също да излезете с изключението си и да им се обадите по -късно в програмата си. Това ви позволява да дадете конкретно описание на вашето изключение и да го наименувате както искате.

Независимо от това, всяко дефинирано от потребителя изключение (пряко или косвено) все още идва от вградения Изключение клас на Python.

Примерният код по -долу прави препратка към базата Изключение директно чрез обаждане RuntimeError от него:

class connectionError(RuntimeError):
def __init__(self, value):
self.value = value
try:
raise connectionError('Bad hostname')
except connectionError as err:
print(err.value)
Output: Bad hostname

Отбележи, че connectionError , в този случай, е дефиниран от потребителя клас, който можете да повдигнете по всяко време, когато имате нужда от него във вашата програма.

Свързани: Ръководство за начинаещи по регулярни изрази с Python

Можете да направите дефинирано от потребителя изключение, като го извлечете директно от Изключение базов клас. Изключението по -долу обаче предотвратява изваждането на 5 от 6 и извиква изключението от базовия клас директно:

class errors(Exception):
pass
class sixFiveError(errors):
def __init__(self, value, message):
self.value = value
self.message = message
try:
raise sixFiveError(6-5,'This substraction is not allowed')
except sixFiveError as e:
print('There was an error:', e.message)
Output: There was an error: This substraction is not allowed

На практика можете да използвате изключение, което сте дефинирали по -рано, като го извикате в друга функция. Например, можете да създадете floatError което позволява само добавянето на два поплавъка:

# First call the base exception classes:
class errors(Exception):
pass
# Next, derive your own exception from the base class:
class FloatError(errors):
def __init__(self, value, message):
self.value = value
self.message = message
# Create a function to add two floats:
def addTwoFloat(a, b):
if (type(a) and type(b)) != float:
raise FloatError(a+b,'Numbers must be float to add')
else:
print(a + b)
addTwoFloat(4, 7)
Output: __main__.FloatError: (11, 'Numbers must be float to add')

Тъй като сега сте дефинирали a FloatError клас, Python го повдига, ако се опитате да добавите два неплаващи литерала, използвайки addtwoFloat функция.

Можете да отпечатате FloatError class в същия Python файл, където сте го създали, за да видите какво се случва:

print(FloatError)
Output:

FloatError обаче не е вградено изключение в Python. Можете да проверите това, като се обадите FloatError в друг свеж Python файл, където не сте създали този клас:

print(FloatError)
Output: NameError: name 'FloatError' is not defined

Получавате а Грешка в името защото Python не го разпознава като стандартно изключение.

Можете да опитате и самоопределяне на други класове грешки, за да видите как се разиграват.

Направете вашите програми на Python по-удобни за потребителя с изключения

Има много стандартни изключения в Python. Но можете да определите и своя. Независимо от това, лекотата на използване на вашата програма зависи до известна степен от начина, по който се справя с различни изключения (независимо дали са дефинирани от потребителя, неспецифични или стандартни).

Изключенията обаче ви позволяват да диктувате как трябва да работи вашата програма, когато потребителите взаимодействат с тях. Ясно и сбито посочване на причината за грешка също дава на потребителите информация за това, което правят грешно, а понякога ги насочва в правилната посока.

Дял Дял Туит електронна поща Как да отстраните грешки в кода на Python

Оборудвайте се с ноу-хау, за да смачкате всяка грешка в Python по пътя си.

Прочетете Напред
Свързани теми
  • Програмиране
  • Python
  • Уроци по кодиране
За автора Идису Омисола(94 статии са публикувани)

Idowu е страстен за всичко умно технология и производителност. В свободното си време той играе с кодиране и превключва на шахматната дъска, когато му е скучно, но също така обича да се откъсва от рутината от време на време. Страстта му да показва на хората пътя около съвременните технологии го мотивира да пише повече.

Още от Idowu Omisola

Абонирайте се за нашия бюлетин

Присъединете се към нашия бюлетин за технически съвети, рецензии, безплатни електронни книги и изключителни оферти!

Щракнете тук, за да се абонирате