Jak obsługiwać wyjątki w Pythonie (spróbuj z wyjątkiem-w końcu)
Dowiedz się, jak obsługiwać wyjątki w Pythonie za pomocą bloków try, z wyjątkiem, else i wreszcie. Napisz bezbłędny i odporny na awarie kod w Pythonie.
Przegląd
Solidne oprogramowanie musi być przygotowane na nieoczekiwane warunki, takie jak brakujące pliki, nieprawidłowe dane wejściowe użytkownika, awarie baz danych lub zakłócenia sieci. Gdy w Pythonie wystąpi błąd, zgłasza wyjątek. Jeśli nie zostaną obsłużone, wyjątki natychmiast zatrzymują program i drukują stos śledzenia.
Podstawowym narzędziem Pythona do zarządzania błędami środowiska wykonawczego jest blok „try-except”. Umieszczasz kod, który może zgłosić błąd w bloku „try”, i definiujesz kod obsługi błędów w jednym lub większej liczbie bloków „z wyjątkiem”. Zdecydowanie zaleca się określenie dokładnej klasy wyjątku (np. `ValueError` lub `ZeroDivisionError`), ponieważ wychwytywanie wszystkich ogólnych wyjątków (`except:`) może maskować błędy.
Aby przepływ wyjątków był bardziej wyrazisty, Python udostępnia dwa dodatkowe bloki: „else” i „w końcu”. Blok „else” jest wykonywany tylko wtedy, gdy w bloku „try” nie zgłoszono wyjątków, co jest przydatne w przypadku kodu, który powinien działać tylko w przypadku powodzenia. Blok „w końcu” jest wykonywany *zawsze*, niezależnie od tego, czy wystąpił wyjątek, co czyni go idealnym miejscem do czyszczenia, takiego jak zamykanie plików lub połączeń z bazami danych.
Dane wyjściowe kodu i wykonania
Ten skrypt demonstruje solidną obsługę błędów w Pythonie za pomocą try, z wyjątkiem, else i wreszcie.
def divide_numbers(a, b):
try:
# Code that might raise an exception
result = a / b
except ZeroDivisionError:
# Handling a specific exception
print("Error: Cannot divide by zero!")
except TypeError:
# Handling another exception type
print("Error: Inputs must be numbers!")
else:
# Run only if try block succeeded
print(f"Success! Result of {a}/{b} is {result}")
finally:
# Runs no matter what
print("Division attempt completed.")
divide_numbers(10, 2)
print("---")
divide_numbers(10, 0)Success! Result of 10/2 is 5.0
Division attempt completed.
---
Error: Cannot divide by zero!
Division attempt completed.Wdrażanie krok po kroku
- Umieść kod, który może zakończyć się niepowodzeniem, w bloku try.
- Wychwytuj określone typy błędów za pomocą bloków z wyjątkiem wyjątku:, aby sprawnie obsługiwać awarie.
- Użyj else dla kodu, który musi zostać wykonany tylko po pomyślnych blokach try.
- Użyj w końcu, aby zagwarantować, że działania czyszczące zostaną uruchomione niezależnie od błędów.
Często zadawane pytania
Czy mogę przechwycić wiele wyjątków w jednym bloku z wyjątkiem?
Tak, możesz przekazać je jako krotkę: z wyjątkiem (ValueError, TypeError) jako e:.
Jak zgłosić własne wyjątki?
Użyj słowa kluczowego raise, po którym następuje instancja wyjątku: raise ValueError("Nieprawidłowa wartość konfiguracyjna").
Powiązane tematy
Dowiedz się, jak przekonwertować ciąg znaków na liczbę całkowitą w Pythonie za pomocą funkcji int(). Bezpiecznie obsługuj błędy i konwertuj liczby z formatu binarnego, ósemkowego lub szesnastkowego.
Jak odczytać plik w PythonieNaucz się czytać pliki w Pythonie. Opanuj obsługę instrukcji open, readline, readlines i bezpiecznej obsługi wyjątków plików.
Jak pisać do pliku w PythonieDowiedz się, jak zapisywać tekst do plików w Pythonie. Opanuj różnicę między trybami zapisu („w”) i dodawania („a”) dzięki bezpiecznym menedżerom kontekstu.
Polecane zasoby Pythona
Poszerzaj swoją wiedzę dzięki powiązanym interaktywnym samouczkom, ściągawkom i porównaniom kodów.
Pętle Pythona
Dowiedz się, jak używać pętli Pythona do iteracji danych. Opanuj pętle for, pętle while, przerywaj, kontynuuj i pętluj najlepsze praktyki dzięki interaktywnym przykładom.
Ściągawka dotycząca metod ciągów w Pythonie
Kompletny przewodnik dotyczący manipulacji ciągami znaków w języku Python. Opanuj formatowanie, wyszukiwanie, dzielenie, zastępowanie i sprawdzanie właściwości ciągów.
Python kontra JavaScript: który język programowania jest najlepszy?
Kompleksowe porównanie Pythona i JavaScript. Poznaj różnice w składni, wydajność, przypadki użycia (backend vs frontend) i przykłady kodowania.