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ś, żeby 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:
próbować:
"kod do wykonania"
z wyjątkiem:
"Komunikat o błędzie"
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:
próbować:
druk (9+6)
z wyjątkiem:
print("komunikat o błędzie")
Wreszcie:
print("proszę zrestartować")
Wynik:
15
proszę uruchomić ponownie
W powyższym kodzie, proszę uruchomić ponownie działa nieprzerwanie, niezależnie od tego, czy jest wyjątek, czy nie.
Na jeszcze stan może również następować po z wyjątkiem komunikat:
próbować:
C = 2 + B
z wyjątkiem:
print("B musi być zdefiniowany")
jeszcze:
drukuj (u"Dodano pomyślnie! Wynik to %s"%(C))
Wynik: B musi być zdefiniowany
Teraz spróbuj ponownie ze zdefiniowanym „B”:
próbować:
B = 5
C = 2 + B
z wyjątkiem:
print("B musi być zdefiniowany")
jeszcze:
drukuj (u"Dodano pomyślnie! Wynik to %s"%(C))
Wynik: Dodano pomyślnie! Wynik to 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:
próbować:
C = 2 + B
z wyjątkiem NameError jako err:
print (err, ":", "należy zdefiniować B, proszę")
jeszcze:
drukuj (u"Dodano pomyślnie! Wynik to %s"%(C))
Wynik: nazwa 'B' nie jest zdefiniowana: B musi być zdefiniowane, proszę
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 twoim pisemnym wyjątkiem ("B musi być zdefiniowane, proszę").
Związane z: Podstawowe zasady programowania, które każdy programista musi znać
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:
próbować:
B = 5
C = 2 + B
D = pływak (6)
F = 7/0
z wyjątkiem NameError jako err:
print (err,":", "należy zdefiniować B, proszę")
z wyjątkiem ValueError jako val:
print (val,":", "Nie możesz przekonwertować tych danych")
z wyjątkiem ZeroDivisionError jako zeroerr:
print (zeroerr,":", "Nie możesz dzielić liczby przez zero")
jeszcze:
drukuj (u"Operacja powiodła się! Wyniki to: %s, %s i %s"%(C, D, F))
Wynik: dzielenie przez zero: nie można dzielić liczby przez 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:
Wynik: Operacja powiodła się! Wyniki to: 7, 6,0 i 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:
klasa połączeniaError (RuntimeError):
def __init__(self, wartość):
self.value = wartość
próbować:
raise connectionError("Zła nazwa hosta")
z wyjątkiem connectionError as err:
drukuj (wartość błędna)
Wynik: Zła nazwa hosta
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:
błędy klas (wyjątek):
przechodzić
klasa szóstaPięćBłąd (błędy):
def __init__(self, value, message):
self.value = wartość
self.message = wiadomość
próbować:
podnieś sześćPięćBłąd (6-5,"To odejmowanie jest niedozwolone")
z wyjątkiem sześciuPięćBłąd jako e:
print("Wystąpił błąd:", e.message)
Wynik: Wystąpił błąd: to odejmowanie jest niedozwolone
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:
# Najpierw wywołaj podstawowe klasy wyjątków:
błędy klas (wyjątek):
przechodzić
# Następnie wyprowadź własny wyjątek z klasy bazowej:
class FloatError (błędy):
def __init__(self, value, message):
self.value = wartość
self.message = wiadomość
# Utwórz funkcję, aby dodać dwa pływaki:
def addTwoFloat (a, b):
if (typ (a) i typ (b)) != float:
podnieś FloatError (a+b,"Liczby muszą być zmiennoprzecinkowe, aby je dodać")
jeszcze:
nadruk (a + b)
addTwoFloat (4, 7)
Wynik: __main__.FloatError: (11, 'Liczby muszą być zmiennoprzecinkowe, aby można je było dodać')
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:
drukuj (FloatError)
Wynik:
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:
drukuj (FloatError)
Wynik: NameError: nazwa 'FloatError' nie jest zdefiniowana
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.
Wyposaż się w wiedzę, jak usunąć każdy błąd Pythona na swojej drodze.
Czytaj dalej
- Programowanie
- Pyton
- Poradniki kodowania
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.
Zapisz się do naszego newslettera
Dołącz do naszego newslettera, aby otrzymywać porady techniczne, recenzje, bezpłatne e-booki i ekskluzywne oferty!
Jeszcze jeden krok…!
Potwierdź swój adres e-mail w e-mailu, który właśnie do Ciebie wysłaliśmy.