Обработка на изключения на Python Използване на инструкция try, освен и final

В този урок ще научите как да се справяте с изключенията във вашата програма на Python, използвайки try, освен и final инструкции с помощта на примери.

Видео: Обработка на изключения на Python (опитайте … освен … накрая)

Изключения в Python

Python има много вградени изключения, които се появяват, когато вашата програма срещне грешка (нещо в програмата се обърка).

Когато възникнат тези изключения, интерпретаторът на Python спира текущия процес и го предава на процеса на извикване, докато не бъде обработен. Ако не се обработи, програмата ще се срине.

Например, нека разгледаме програма, в която имаме функция, Aкоято извиква функция B, която от своя страна извиква функция C. Ако възникне изключение във функцията, Cно не се обработи C, изключението преминава към Bи след това към A.

Ако никога не се обработи, се показва съобщение за грешка и нашата програма внезапно спира.

Улавяне на изключения в Python

В Python изключенията могат да се обработват с помощта на 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

В тази програма ние преглеждаме стойностите на списъка randomList. Както бе споменато по-горе, частта, която може да причини изключение, се поставя вътре в tryблока.

Ако не възникне изключение, exceptблокът се пропуска и нормалният поток продължава (за последната стойност). Но ако възникне някакво изключение, то се улавя от exceptблока (първа и втора стойност).

Тук отпечатваме името на изключението, използвайки exc_info()функцията вътре в sysмодула. Можем да видим, че aпричините ValueErrorи 0причините ZeroDivisionError.

Тъй като всяко изключение в Python наследява от базовия 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)

Тази програма има същия изход като горната програма.

Улавяне на специфични изключения в Python

В горния пример не споменахме конкретно изключение в 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

Повишаване на изключения в Python

При програмирането на Python се правят изключения, когато възникнат грешки по време на изпълнение. Също така можем ръчно да създаваме изключения, използвайки 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!

Python опитайте с клауза else

В някои ситуации може да искате да стартирате определен блок код, ако кодовият блок се tryизпълнява без никакви грешки. За тези случаи можете да използвате незадължителната elseключова дума с tryизраза.

Забележка : Изключенията в клаузата else не се обработват от предходните, освен клаузите.

Нека разгледаме един пример:

 # 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()

Този тип конструкция гарантира, че файлът е затворен, дори ако възникне изключение по време на изпълнението на програмата.

Интересни статии...