Ett undantag är en oväntad händelse som inträffar under körningen av programmet. Det är också känt som ett körtidsfel. När det felet uppstår genererar Python ett undantag under körningen och som kan hanteras, vilket förhindrar ditt program från att avbryta. I den här artikeln kommer vi att fokusera på 'Hur kan vi skriva ut ett undantag i Python?'
Vad är undantag i Python?
I Pytonorm , Undantag är en typ av fel i programmet. Ett fel kallas ett 'undantag' när programmet är syntaktisk korrekt, men ett fel uppstår när det körs.
Exempel : I exemplet försöker vi dividera ett tal med noll så att det ger ett körtidsfel.
Python3
num1>=> 5> num2>=> 0> print>(num1>/> num2)> |
>
>
Produktion
Traceback (most recent call last): File 'Solution.py', line 5, in print(num1 / num2) ZeroDivisionError : division by zero>
Detta program är syntaktisk korrekt . Det enda problemet här beror på siffrorna som används för operationen. Eftersom vi inte kan dividera något tal med 0, ger det ett fel. Detta är alltså ett exempel på 'Undantag'.
Hur ser undantagen ut?
I programmet ovan fick vi ett undantag när vi körde det. Felet som kastades visade linjen där felet inträffade, den exakta linjen och feltypen.
Feltypen som visades kallas 'Undantag'. Genom undantag får vi veta om problemet som har uppstått. Undantaget i programmet ovan är ZeroDivisionError: division med noll .
Exempel : Här görs tilldelningen av variabeln var1 av en Odefinierad variabel , var2.
Python3
stående
var1>=> var2> |
>
>
Produktion
Traceback (most recent call last): File 'Solution.py', line 2, in var1 = var2 NameError: name 'var2' is not defined>
Ovan kan vi se undantaget som NameError: namnet 'var2' är inte definierat .
Undantagshantering i Python
Undantag kan ibland vara väldigt besvärande. Det är här konceptet med undantagshantering kommer in. Genom undantagshantering kan vi enkelt hantera undantagen för användaren istället för att bara kasta fel på användaren.
Exempel: I detta program tas inmatningen i typen 'int'. Men om vi skriver in ett tecken i det kommer det att ge ett 'ValueError'. Detta kan förvirra användaren många gånger. Här gör vi undantagshanteringen. Istället för att kasta värdefel och förvirra användaren kommer vi att visa ett uttalande som föreslår användaren att försöka igen och vi kommer att ge användaren en chans att försöka mata in siffrorna igen.
Python3
num1>=> int>(>input>(>'Enter num1: '>))> num2>=> int>(>input>(>'Enter num2: '>))> answer>=> f>'{num1} / {num2} = {num1 / num2}'> print>(answer)> |
>
>
Produktion
Enter num1: 1 Enter num2: b Traceback (most recent call last): File 'D:/PycharmProjects/pythonProject2/main.py', line 15, in num2 = int(input('Enter num2: ')) ValueError: invalid literal for int() with base 10: 'b'> Använder försök, förutom och annat
I den här koden körs while-slingan eftersom vi vill låta användaren försöka tills inmatningen ges på rätt sätt. Vi har använt 'försök'-satsen. Try-satsen letar efter fel i raderna i den satsen.
Om ett undantag påträffas, hoppar det till 'except'-satsen och skriver ut felmeddelandet från oss. Vi har skrivit två utom satser, en med ValueError och den andra med ZeroDivisionError. Var och en av dessa klausuler behandlar respektive undantag och skriver ut respektive meddelande.
Sedan, slutligen, har vi skrivit den andra klausulen. Om inget fel påträffas exekveras det andra blocket. I det andra blocket skriver vi ut divisionens kvot och bryter ut från slingan.
Python3
while> True>:> >try>:> >num1>=> int>(>input>(>'Enter num1: '>))> >num2>=> int>(>input>(>'Enter num2: '>))> >answer>=> f>'{num1} / {num2} = {num1 / num2}'> >except> ValueError as e:> >print>(>'Try putting an integer value.
Error Occured:'>, e)> >except> ZeroDivisionError as ex:> >print>(>'Division by zero is invalid!
Error Occured:'>, ex)> >else>:> >print>(answer)> >break> |
>
>
Produktion:

Undantag för utskrift
Nu, som vi har sett exakt vad undantag är, hur de ser ut och hur man hanterar dem, ska vi nu titta på att skriva ut dem.
För att skriva ut undantagen använder vi 'som' nyckelord för Python.
Vi har använt samma exempel som vi använde tidigare. Vi har använt nyckelordet 'as' och deklarerat variabeln 've' för 'ValueError' och 'zde' för 'ZeroDivisionError'. Sedan, om vi stöter på några undantag, har vi skrivit koden för att skriva ut det undantaget. Men fortfarande kan vi inte se vilken typ av undantag vi fick.
Python3
while> True>:> >try>:> >num1>=> int>(>input>(>'Enter num1: '>))> >num2>=> int>(>input>(>'Enter num2: '>))> >answer>=> f>'{num1} / {num2} = {num1 / num2}'> >except> ValueError as ve:> >print>(ve)> >except> ZeroDivisionError as zde:> >print>(zde)> >else>:> >print>(answer)> >break> |
>
>
Produktion:
Enter num1: a invalid literal for int() with base 10: 'a' Enter num1: 0 Enter num2: 0 division by zero Enter num1: 16 Enter num2: 4 16 / 4 = 4.0>
Typ av undantag för utskrift
För att se undantagstypen kan vi använda funktionen type().
Här har vi använt funktionen type() för att veta vilken typ av undantag vi har stött på när vi körde koden.
Python3
while> True>:> >try>:> >num1>=> int>(>input>(>'Enter num1: '>))> >num2>=> int>(>input>(>'Enter num2: '>))> >answer>=> f>'{num1} / {num2} = {num1 / num2}'> >except> ValueError as ve:> >print>(>type>(ve), ve)> >except> ZeroDivisionError as zde:> >print>(>type>(zde), zde)> >else>:> >print>(answer)> >break> |
intern drift av hashmap
>
>
Produktion
Enter num1: a invalid literal for int() with base 10: 'a' Enter num1: 1 Enter num2: 0 division by zero Enter num1: 4 Enter num2: 2 4 / 2 = 2.0>