Python Undantagshantering: prova, fånga, slutligen och höja [Exempel]

Vad är ett undantagshantering i Python?

Ett undantag är ett fel som inträffar vid tidpunkten för körning av ett program. Men när du kör ett program, Python genererar ett undantag som bör hanteras för att undvika att ditt program kraschar. I Python språk, undantag utlöses automatiskt vid fel, eller så kan de triggas och fångas upp av din kod.

Undantaget indikerar att även om händelsen kan inträffa, inträffar denna typ av händelse sällan. När metoden inte kan hantera undantaget, kastas den till sin anropsfunktion. Så småningom, när ett undantag kastas ut från huvudfunktionen, avslutas programmet abrupt.

Vanliga exempel på undantag

  • Dividera med noll
  • Åtkomst till en fil som inte finns.
  • Tillägg av två inkompatibla typer
  • Försöker komma åt ett obefintligt index för en sekvens
  • Ta bort tabellen från den frånkopplade databasservern.
  • Bankomatuttag på mer än tillgängligt belopp

Varför ska du använda undantag?

Här är skälen till att använda undantag i Python:

  • Undantagshantering låter dig skilja felhanteringskod från normal kod.
  • Ett undantag är a Python objektet som representerar ett fel.
  • Precis som med kodkommentarer hjälper undantag dig att påminna dig själv om vad programmet förväntar sig.
  • Det förtydligar koden och förbättrar läsbarheten.
  • Låter dig stimulera konsekvenser då felhanteringen sker på ett ställe och på ett sätt.
  • Ett undantag är en bekväm metod för att hantera felmeddelanden.
  • In Python, kan du höja ett undantag i programmet genom att använda höjningsundantagsmetoden.
  • Att höja ett undantag hjälper dig att bryta den nuvarande kodexekveringen och återställer undantaget till förväntan tills det hanteras.
  • Bearbetning av undantag för komponenter som inte kan hantera dem direkt.

Undantagsregler

Här är några viktiga regler för Python undantagshantering:

  • Undantag måste vara klassobjekt
  • För klassundantag kan du använda try-satsen med en except-sats som nämner en viss klass.
  • Även om en sats eller ett uttryck är syntaktisk korrekt, kan det visa ett fel när ett försök görs att köra det.
  • Fel som upptäcks under avrättningen kallas undantag, och de är inte villkorslöst dödliga.

Python Undantagshanteringsmekanism

Undantagshantering hanteras av följande 5 nyckelord:

  1. prova
  2. fångst
  3. slutligen
  4. kasta

Python Prova Statement

En try-sats inkluderar nyckelordet try, följt av ett kolon (:) och en kodsvit där undantag kan förekomma. Den har en eller flera klausuler.

Under körningen av try-satsen, om inga undantag inträffade då, ignorerar tolken undantagshanterarna för den specifika try-satsen.

Om något undantag inträffar i en försökssvit, upphör försökssviten och programkontrollen överförs till den matchande utomhanteraren efter försökssviten.

Syntax:
try:
statement(s)

Fångstförklaringen

Fångstblock tar ett argument i taget, vilket är den typ av undantag som det sannolikt kommer att fånga. Dessa argument kan sträcka sig från en specifik typ av undantag som kan varieras till en övergripande kategori av undantag.

Regler för fångstblock:

  • Du kan definiera ett fångstblock genom att använda nyckelordet fångst
  • Parametern Catch Exception är alltid inom parentes
  • Det representerar alltid den typ av undantag som catch block hanterar.
  • En undantagshanteringskod skrivs mellan två {} klammerparenteser.
  • Du kan placera flera fångstblock inom ett enda försöksblock.
  • Du kan bara använda ett fångstblock efter försöksblocket.
  • Alla fångstblock bör beställas från underklass till superklassundantag.

Exempelvis:

try
}
catch (ArrayIndexOutOfBoundsException e) {
System.err.printin("Caught first " + e.getMessage()); } catch (IOException e) {
System.err.printin("Caught second " + e.getMessage());
}

Slutligen uttalande i Python

Slutligen exekveras alltid blocket oavsett om ett undantag kastas eller inte. Det sista nyckelordet låter dig skapa ett kodblock som följer ett försök-fångst-block.

Slutligen är klausul valfri. Det är avsett att definiera saneringsåtgärder som bör vara de som utförs under alla förhållanden.

try:
    raise KeyboardInterrupt
finally:
    print 'welcome, world!'
Output
Welcome, world!
KeyboardInterrupt

Slutligen exekveras klausul före try-satsen.

Höj uttalande i Python

Raise-satsen anger ett argument som initierar undantagsobjektet. Här följer ett kommatecken undantagsnamnet och argumentet eller tupeln av argumentet som följer kommatecken.

Syntax:

raise [Exception [, args [, traceback]]]

I den här syntaxen är argumentet valfritt, och vid tidpunkten för körningen är undantagsargumentvärdet alltid inget.
Exempelvis:
A Python undantag kan vara vilket värde som helst som en sträng, klass, tal eller ett objekt. De flesta av dessa undantag som tas upp av Python core är klasser med ett argument som är en instans av klassen.

Viktigt Python fel

Fel typ Systembeskrivningar
ArithmeticError ArithmeticError fungerar som en basklass för alla aritmetiska undantag. Den höjs för fel i aritmetiska operationer.
ImportError ImportError uppstår när du försöker importera en modul som inte finns. Denna typ av undantag uppstår om du har skrivit fel i modulnamnet eller modulen som inte finns i standardsökvägen.
Indexfel Ett IndexErroris uppstår när du försöker hänvisa till en sekvens som ligger utanför intervallet.
KeyError När en specifik nyckel inte hittas i en ordbok uppstår ett KeyError-undantag.
Namnfel Ett NameError uppstår när ett namn refereras till i kod som aldrig finns i det lokala eller globala namnområdet.
ValueError Värdefel uppstår när en funktion eller inbyggd operation får ett argument som kan vara av korrekt typ men som inte har lämpligt värde.
EOFerror Den här typen av fel uppstår när en av de inbyggda funktionerna (input() eller raw_input()) når ett EOF-tillstånd utan att läsa några data.
ZeroDivisonError Denna typ av fel uppstår när division eller modul med noll sker för alla numeriska typer.
IOFel- Den här typen av fel uppstår när en in-/utmatningsoperation misslyckas.
syntaxfel SyntaxErrors uppstår när det finns ett fel i Python syntax.
IdentificationError Detta fel uppstod när indraget inte är korrekt definierat

Annat viktigt Python undantag

undantag Systembeskrivningar
Aritmetikundantag Räknefel, till exempel dividera med noll.
ArraylndexOutOfBoundsException Arrayindex är out-of-bounds.
ArrayStoreException Tilldelning hjälper dig till arrayelementet av en inkompatibel typ.
ClassCastException Ogiltig rollbesättning
MlegalMonitorStateException Olaglig monitordrift, som att vänta på en olåst tråd.
MlegalStateException Miljön eller programmet är i fel skick.
ClassNotFoundException Klassen hittades inte.
CloneNotSupportedException Försök att klona ett objekt som inte implementerar det klonbara gränssnittet.
Illegal AccessException Tillgång till en klass nekas.
InstantiationException Uppstår när du försöker skapa ett objekt av ett gränssnitt eller en abstrakt klass.
CloneNotSupportedException Försök att klona ett objekt som inte implementerar gränssnittet.

Fel kontra undantag

Fel undantag
Alla fel i Python är den omarkerade typen. Undantag inkluderar både markerad och omarkerad typ.
Fel uppstår vid körning som är okända för kompilatorn. Undantag kan återställas genom att hantera dem med hjälp av try-catch-block.
Fel orsakas oftast av miljön där ett program körs. Applikationen i sig orsakar undantag.
Exempel:
OutofMemoryError
Exempel:
Markerade undantag, SQL-undantag, NullPointerException, etc.

Sammanfattning

  • Ett undantag är ett fel som inträffade under körningen av ett program.
  • Undantaget indikerar att även om händelsen kan inträffa, inträffar denna typ av händelse sällan.
  • Vanliga exempel på undantag är 1) division med noll, 2) åtkomst till en fil som inte finns, 3) tillägg av två inkompatibla typer.
  • Ett undantag är a Python objekt som representerar ett fel.
  • En try-sats inkluderar nyckelordet try, följt av ett kolon (:) och en kodsvit där undantag kan förekomma. Den har en eller flera klausuler.
  • Fångstblock tar ett argument i taget, vilket är den typ av undantag som det sannolikt kommer att fånga.
  • Raise-satsen anger ett argument som initierar undantagsobjektet.
  • Slutligen, blocket körs alltid oavsett om ett undantag kastas eller inte.