Jak obsługiwać wyjątki w Pythonie

Jak obsługiwać wyjątki w Pythonie

Obsługa wyjątków to możliwość dostosowywania i wyświetlania komunikatów o błędach dla części programu, które nie działają.





Niezależnie od tego, czy tworzysz witrynę internetową, tworzysz interfejs API, moduł, czy jakikolwiek inny produkt przy użyciu Pythona, Twoja zdolność do efektywnej obsługi wyjątków pozwala jawnie określić przyczynę błędu.





Tutaj przyjrzymy się, jak radzić sobie z wyjątkami w Pythonie.





Jak działa obsługa wyjątków w Pythonie

Kiedy zgłaszasz wyjątki, mówisz Pythonowi, aby wyświetlał komunikat, gdy blok kodu się nie powiedzie. Obsługa wyjątków jest jak mówienie komuś, aby spróbował podnieść ciężar. A jeśli nie mogą, powinni Cię o tym powiadomić.

Aby jednak zgłosić wyjątek w Pythonie, powiesz Pythonowi, aby spróbował uruchomić określony blok kodu. Jeśli ten blok się nie powiedzie, możesz poprosić Pythona o zgłoszenie zdefiniowanego wyjątku do nieudanego kodu.



Kiedy należy używać wyjątków w programowaniu w Pythonie?

W większości przypadków możesz zamaskować standardowe błędy Pythona za pomocą wyjątków. Musisz jednak zachować czujność, ponieważ może to spowodować problemy z debugowaniem. W związku z tym może być trudno ustalić podstawową przyczynę ewentualnego błędu.

Dlatego powinieneś używać wyjątków, gdy wystarczająco przetestowałeś swój kod i masz pewność, że działa. Ostatecznie najlepszą praktyką jest wykorzystanie ich do obsługi potencjalnych błędów, które mogą wyniknąć z końca użytkownika, a nie z samego kodu.





Innymi słowy, możesz użyć wyjątków jako narzędzia ostrzegawczego, które poprowadzi użytkowników, jak korzystać z Twojego programu.

Obsługa wyjątków Pythona

Aby obsłużyć wyjątki w Pythonie, najpierw musisz opakować swój kod w a spróbuj... z wyjątkiem blok. Czasami może być konieczne dołączenie wreszcie oświadczenie do obsługi dalszych działań, w zależności od Twoich potrzeb.





Koncepcja kodowania wyjątków Pythona ogólnie wygląda tak:

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

Jak wspomniano wcześniej, możesz również użyć wreszcie w bloku wyjątków. Ale kod, który piszesz w środku a wreszcie klauzula jest niezależna i działa niezależnie od tego, czy istnieje wyjątek, czy nie.

Zasadniczo przydaje się, jeśli masz inny blok kodu, który chcesz uruchamiać w sposób ciągły, niezależnie od tego, co dzieje się w spróbuj... z wyjątkiem blok.

Oto przykład:

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

W powyższym kodzie, proszę uruchomić ponownie działa nieprzerwanie, niezależnie od tego, czy jest wyjątek, czy nie.

jakiś w przeciwnym razie stan może również następować po z wyjątkiem oświadczenie:

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

Teraz spróbuj ponownie ze zdefiniowanym „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

Powyższe przykłady są niestandaryzowanymi wyjątkami. Ale możesz mieć bardziej wyraźny wyjątek, gdy połączysz wbudowane (zdefiniowane) wyjątki z wyjątkami niestandaryzowanymi:

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

Powyższy wyjątek najpierw sprawdza, czy istnieje NazwaBłąd w próbować blok. Następnie drukuje standard NazwaBłąd najpierw wyjątek (' nazwa 'B' nie jest zdefiniowana'). I wspiera to swoim pisemnym wyjątkiem („należy zdefiniować B, proszę”).

Powiązane: Podstawowe zasady programowania, które każdy programista musi znać

najlepsze darmowe oprogramowanie do mapowania myśli 2018

A jeśli chcesz poradzić sobie z łańcuchem wyjątków, możesz również towarzyszyć próbować blokować z wieloma z wyjątkiem sprawozdania. Jest to bardzo przydatne, jeśli próbować blok może mieć wiele wyjątków:

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

Co jeśli podział jest prawidłowy? Na przykład zastępując F = 7/0 w powyższym kodzie z F = 7/5 daje:

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

Wyjątki zdefiniowane przez użytkownika w Pythonie

Możesz również wymyślić swój wyjątek i wywołać go później w swoim programie. Dzięki temu możesz podać konkretny opis wyjątku i nadać mu dowolną nazwę.

Niemniej jednak każdy wyjątek zdefiniowany przez użytkownika (bezpośrednio lub pośrednio) nadal pochodzi z wbudowanego Wyjątek klasa Pythona.

Poniższy przykładowy kod odwołuje się do bazy Wyjątek bezpośrednio dzwoniąc Błąd wykonania z tego:

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

Zauważ, że błąd połączenia , w tym przypadku jest klasą zdefiniowaną przez użytkownika, którą możesz podnieść w dowolnym momencie w swoim programie.

Związane z: Przewodnik dla początkujących po wyrażeniach regularnych w Pythonie

Możesz zrobić wyjątek zdefiniowany przez użytkownika, wyprowadzając go bezpośrednio z Wyjątek klasa podstawowa. Poniższy wyjątek uniemożliwia jednak odejmowanie 5 od 6 i wywołuje wyjątek bezpośrednio z klasy bazowej:

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

W praktyce możesz skorzystać z wcześniej zdefiniowanego wyjątku, wywołując go w innej funkcji. Na przykład możesz utworzyć błąd pływania co pozwala tylko na dodanie dwóch pływaków:

# 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')

Ponieważ teraz zdefiniowałeś a Błąd zmiennoprzecinkowy klasy, Python podnosi ją, jeśli spróbujesz dodać dwa niezmienne literały za pomocą addtwoFloat funkcjonować.

Możesz wydrukować Błąd zmiennoprzecinkowy w tym samym pliku Pythona, w którym go utworzyłeś, aby zobaczyć, co się stanie:

print(FloatError)
Output:

Błąd zmiennoprzecinkowy , jednak nie jest wbudowanym wyjątkiem Pythona. Możesz to zweryfikować, dzwoniąc Błąd zmiennoprzecinkowy w innym świeżym pliku Pythona, w którym nie utworzyłeś tej klasy:

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

Dostajesz NazwaBłąd ponieważ Python nie rozpoznaje tego jako standardowego wyjątku.

Możesz spróbować samodzielnie zdefiniować inne klasy błędów, aby zobaczyć, jak się rozgrywają.

Spraw, aby Twoje programy Pythona były bardziej przyjazne dla użytkownika dzięki wyjątkom

W Pythonie istnieje wiele standardowych wyjątków. Ale możesz również zdefiniować swoje. Niemniej jednak łatwość korzystania z programu zależy w pewnym stopniu od tego, jak obsługuje on różne wyjątki (zdefiniowane przez użytkownika, niespecyficzne lub standardowe).

Wyjątki pozwalają jednak dyktować sposób działania programu, gdy użytkownicy wchodzą z nim w interakcję. Jasne i zwięzłe określenie przyczyny błędu daje również użytkownikom informacje na temat tego, co robią źle, a czasami wskazuje im właściwy kierunek.

Udział Udział Ćwierkać E-mail Jak debugować kod Pythona

Wyposaż się w wiedzę, jak usunąć każdy błąd Pythona na swojej drodze.

Czytaj dalej
Powiązane tematy
  • Programowanie
  • Pyton
  • Poradniki kodowania
O autorze Idisou Omisola(94 opublikowane artykuły)

Idowu pasjonuje się każdą inteligentną technologią i produktywnością. W wolnych chwilach bawi się kodowaniem, a gdy się nudzi, przechodzi na szachownicę, ale od czasu do czasu uwielbia też oderwać się od rutyny. Jego pasja do pokazywania ludziom drogi do nowoczesnych technologii motywuje go do pisania więcej.

Więcej od Idowu Omisola

Zapisz się do naszego newslettera

Dołącz do naszego newslettera, aby otrzymywać porady techniczne, recenzje, bezpłatne e-booki i ekskluzywne oferty!

Kliknij tutaj, aby zasubskrybować