Unntakskjeding og gjenoppretting
Sveip for å vise menyen
Når du håndterer feil i Python, kan du komme ut for en situasjon der det å fange én unntak fører til at du må kaste et annet unntak. I slike tilfeller er det viktig å bevare konteksten til den opprinnelige feilen. Pythons unntakskjeding lar deg gjøre dette ved hjelp av from-nøkkelordet. Ved å eksplisitt kjede unntak gir du mer detaljerte feilmeldinger, noe som gjør det enklere å forstå rekkefølgen av feil som førte til en feiltilstand.
Anta at du skriver en funksjon som behandler inndata fra en fil. Hvis det oppstår en feil under lesing av filen, kan det være ønskelig å kaste et egendefinert unntak som passer bedre til applikasjonens logikk, men samtidig ønsker du å beholde informasjon om den opprinnelige feilen. Ved å bruke raise NewException() from original_exception kan du gjøre nettopp dette.
Å kaste unntak på nytt er en relatert teknikk. Noen ganger, etter å ha fanget et unntak, kan du ønske å utføre opprydding eller logging, og deretter la unntaket forplante seg videre. Dette kan du gjøre ved ganske enkelt å bruke raise uten å spesifisere et unntak, noe som kaster det sist fangede unntaket på nytt. Både unntakskjeding og gjenoppretting av unntak er verdifulle for å skrive robust og lettfeilsøkende kode.
12345678910111213141516# Simple exception chaining and re-raising example def divide(a, b): try: return a / b except ZeroDivisionError as err: # Chain a new exception to the original raise ValueError("Cannot divide by zero") from err try: divide(5, 0) except ValueError as e: print("Caught ValueError:") import traceback traceback.print_exc() print("\nRe-raising the exception...\n") raise
Denne koden demonstrerer enkel unntakskjeding og gjenoppretting av unntak i Python. Funksjonen divide forsøker å dividere to tall og fanger et ZeroDivisionError, som deretter kjedes til et nytt ValueError med en tydelig melding. Den ytre try-except-blokken fanger ValueError, skriver ut hele feilmeldingen som viser begge unntakene, og kaster deretter unntaket på nytt for videre propagasjon.
Takk for tilbakemeldingene dine!
Spør AI
Spør AI
Spør om hva du vil, eller prøv ett av de foreslåtte spørsmålene for å starte chatten vår