Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lära Undantagskedjning och återkastning | Comprehensive Error Handling
Python Strukturell Programmering

Undantagskedjning och återkastning

Svep för att visa menyn

När du hanterar fel i Python kan du stöta på en situation där fångsten av ett undantag leder till att du kastar ett annat undantag. I dessa fall är det viktigt att bevara kontexten för det ursprungliga felet. Pythons undantagskedjning gör det möjligt att göra detta med hjälp av nyckelordet from. Genom att explicit kedja undantag får du mer detaljerade spårningar, vilket gör det enklare att förstå felkedjan som ledde till ett fel.

Anta att du skriver en funktion som behandlar indata från en fil. Om ett fel uppstår vid läsning av filen kan du vilja kasta ett anpassat undantag som bättre passar din applikations logik, men du vill också behålla information om det ursprungliga felet. Med raise NewException() from original_exception kan du göra just detta.

Att återkasta undantag är en relaterad teknik. Ibland, efter att ha fångat ett undantag, kan du vilja utföra viss städning eller loggning och sedan låta undantaget fortsätta uppåt. Detta görs enkelt genom att använda raise utan att specificera ett undantag, vilket återkastar det senast fångade undantaget. Både undantagskedjning och återkastning är värdefulla för att skriva robust och felsökningsvänlig kod.

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

Denna kod visar enkel undantagskedjning och återkastning i Python. Funktionen divide försöker dividera två tal och fångar ett ZeroDivisionError, som kedjas till ett nytt ValueError med ett tydligt meddelande. Den yttre try-except-blocket fångar ValueError, skriver ut hela spårningen som visar båda undantagen och återkastar sedan undantaget för vidare hantering.

question mark

Vilken av följande är en huvudsaklig fördel med undantagskedjning i Python?

Vänligen välj det korrekta svaret

Var allt tydligt?

Hur kan vi förbättra det?

Tack för dina kommentarer!

Avsnitt 1. Kapitel 6

Fråga AI

expand

Fråga AI

ChatGPT

Fråga vad du vill eller prova någon av de föreslagna frågorna för att starta vårt samtal

Avsnitt 1. Kapitel 6
some-alt