Undtagelseskædning og genopkastning
Stryg for at vise menuen
Når du håndterer fejl i Python, kan du støde på en situation, hvor håndtering af én undtagelse fører til, at du rejser en anden undtagelse. I disse tilfælde er det vigtigt at bevare konteksten for den oprindelige fejl. Pythons exception chaining gør det muligt ved hjælp af from-nøgleordet. Ved eksplicit at kæde undtagelser sammen får du mere detaljerede stack traces, hvilket gør det lettere at forstå rækkefølgen af fejl, der førte til en fejltilstand.
Antag, at du skriver en funktion, der behandler input fra en fil. Hvis der opstår en fejl under læsning af filen, kan du ønske at rejse en brugerdefineret undtagelse, der passer bedre til din applikations logik, men du vil også bevare information om den oprindelige fejl. Ved at bruge raise NewException() from original_exception kan du gøre netop dette.
Genopkastning af undtagelser er en beslægtet teknik. Nogle gange, efter at have fanget en undtagelse, kan du ønske at udføre oprydning eller logning og derefter lade undtagelsen propagere opad. Dette kan gøres ved blot at bruge raise uden at angive en undtagelse, hvilket genopkaster den sidst fangede undtagelse. Både exception chaining og genopkastning er værdifulde teknikker til at skrive robust og let-fejlsøgende 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 kode demonstrerer simpel exception chaining og genopkastning i Python. Funktionen divide forsøger at dividere to tal og fanger en ZeroDivisionError, som kædes sammen med en ny ValueError med en tydelig besked. Den ydre try-except-blok fanger ValueError, udskriver den fulde stack trace, der viser begge undtagelser, og genopkaster derefter undtagelsen for at lade den propagere videre.
Tak for dine kommentarer!
Spørg AI
Spørg AI
Spørg om hvad som helst eller prøv et af de foreslåede spørgsmål for at starte vores chat