Руковање изузецима Питхон-а Коришћењем наредбе три, осим и коначно

У овом упутству ћете научити како се рукује изузецима у вашем Питхон програму користећи три, осим и коначно изјаве уз помоћ примера.

Видео: Руковање изузецима Питхон-а (покушајте … осим … коначно)

Изузеци у Питхону

Питхон има много уграђених изузетака који се појављују када ваш програм наиђе на грешку (нешто у програму пође по злу).

Када се појаве ови изузеци, Питхон интерпретер зауставља тренутни процес и прослеђује га позивајућем процесу док се њиме не рукује. Ако се њиме не рукује, програм ће се срушити.

На пример, размотримо програм у којем имамо функцију Aкоја позива функцију B, а она пак позива функцију C. Ако се изузетак догоди у функцији, Cали се њиме не рукује C, изузетак прелази на, Bа затим на A.

Ако се никада не реши, приказује се порука о грешци и наш програм се изненада неочекивано зауставља.

Хватање изузетака у Питхону

У Питхону, са изузецима се може поступати помоћу tryизраза.

Критична операција која може донети изузетак смештена је у tryклаузулу. Шифра која обрађује изузетке написана је у exceptклаузули.

Тако можемо одабрати које ћемо операције извршити након што ухватимо изузетак. Ево једноставног примера.

 # import module sys to get the type of exception import sys randomList = ('a', 0, 2) for entry in randomList: try: print("The entry is", entry) r = 1/int(entry) break except: print("Oops!", sys.exc_info()(0), "occurred.") print("Next entry.") print() print("The reciprocal of", entry, "is", r)

Оутпут

Унос је Упс! дошло. Следећи унос. Унос је 0 Упс! десио. Следећи унос. Унос је 2 Узајамност 2 је 0,5

У овом програму пролазимо кроз вредности листе рандомЛист. Као што је претходно поменуто, део који може изазвати изузетак смештен је унутар tryблока.

Ако се не догоди изузетак, exceptблок се прескаче и наставља се нормалан проток (за последњу вредност). Али ако се деси неки изузетак, хвата га exceptблок (прва и друга вредност).

Овде исписујемо име изузетка помоћу exc_info()функције унутар sysмодула. Можемо видети да aузроци ValueErrorи 0узроци ZeroDivisionError.

Пошто се сваки изузетак у Питхону наслеђује из основне Exceptionкласе, горњи задатак такође можемо извршити на следећи начин:

 # import module sys to get the type of exception import sys randomList = ('a', 0, 2) for entry in randomList: try: print("The entry is", entry) r = 1/int(entry) break except Exception as e: print("Oops!", e.__class__, "occurred.") print("Next entry.") print() print("The reciprocal of", entry, "is", r)

Овај програм има исти излаз као и горњи програм.

Хватање одређених изузетака у Питхону

У горњем примеру нисмо поменули ниједан специфичан изузетак у exceptклаузули.

Ово није добра пракса програмирања, јер ће ухватити све изузетке и на сваки начин се носити са свим случајевима на исти начин. Можемо одредити које изузетке exceptтреба да ухвати клаузула.

tryКлаузула може имати било који број exceptклаузула за руковање различите изузетке, међутим, вршиће се само једна у случају јавља изузетак.

Можемо користити скуп вредности да одредимо вишеструке изузетке у клаузули осим. Ево примера псеудо кода.

 try: # do something pass except ValueError: # handle ValueError exception pass except (TypeError, ZeroDivisionError): # handle multiple exceptions # TypeError and ZeroDivisionError pass except: # handle all other exceptions pass

Повећавање изузетака у Питхону

У Питхон програмирању, изузеци се појављују када се грешке појаве током извођења. Такође можемо ручно да направимо изузетке помоћу raiseкључне речи.

Опционално можемо проследити вредности изузетку да бисмо разјаснили зашто је тај изузетак покренут.

 >>> raise KeyboardInterrupt Traceback (most recent call last):… KeyboardInterrupt >>> raise MemoryError("This is an argument") Traceback (most recent call last):… MemoryError: This is an argument >>> try:… a = int(input("Enter a positive integer: "))… if a <= 0:… raise ValueError("That is not a positive number!")… except ValueError as ve:… print(ve)… Enter a positive integer: -2 That is not a positive number!

Питхон проба са елсе клаузулом

У неким ситуацијама можда ћете желети да покренете одређени блок кода ако се блок кода tryизводио без икаквих грешака. У тим случајевима можете да користите опционалну elseкључну реч са tryисказом.

Напомена : Претходним осим клаузула не обрађују се изузеци у клаузули елсе.

Погледајмо пример:

 # program to print the reciprocal of even numbers try: num = int(input("Enter a number: ")) assert num % 2 == 0 except: print("Not an even number!") else: reciprocal = 1/num print(reciprocal)

Оутпут

Ако проследимо непаран број:

 Унесите број: 1 Ни паран број!

Ако проследимо паран број, реципрочна вредност се израчунава и приказује.

 Унесите број: 4 0,25

Међутим, ако пређемо 0, добијамо ZeroDivisionErrorјер блок кода унутра elseне обрађује претходни except.

 Enter a number: 0 Traceback (most recent call last): File "", line 7, in reciprocal = 1/num ZeroDivisionError: division by zero

Python try… finally

The try statement in Python can have an optional finally clause. This clause is executed no matter what, and is generally used to release external resources.

For example, we may be connected to a remote data center through the network or working with a file or a Graphical User Interface (GUI).

In all these circumstances, we must clean up the resource before the program comes to a halt whether it successfully ran or not. These actions (closing a file, GUI or disconnecting from network) are performed in the finally clause to guarantee the execution.

Here is an example of file operations to illustrate this.

 try: f = open("test.txt",encoding = 'utf-8') # perform file operations finally: f.close()

Ова врста конструкције осигурава да је датотека затворена чак и ако се изузетак догоди током извршавања програма.

Занимљиви Чланци...