Найти тему
Удалёнка

Обработка исключительных ситуаций в Python

Оглавление

Блок try-except в Python
Блок else в блоке в try-except
Блок finally Python

Исключительной называется ситуация, в которой программа ведет себя не так, как предполагал разработчик. Причиной такой ситуации может быть как недоброкачественная работа программиста, так и недопонимание пользователя или умышленные действия взломщика.

Возьмем в качестве примера следующий скрипт. Программа спрашивает у пользователя число и делит сто на это число:

?

1

2

a = float(input("Введите число "))

print(100 / a)

Если пользователь введет информацию, которую мы от него ожидаем, то все сработает как нужно.

Вот что произойдет просто потому, что мы не учли, что на ноль делить нельзя.

-2

А вот что случится, если кто-то специально попытается поломать программу.

-3

Чем сложнее программа, тем больше у нее уязвимых мест, которые вам придется учитывать в процессе разработки. Python предлагает следующий механизм обработки исключительных ситуаций.

-4

Блок try-except в Python

Уязвимый код заключается в блок try, после которого следует блок except, которому может задаваться возможная ошибка и реакция на нее:

?

1

2

3

4

try:

a = float(input("Введите число:"))

except ValueError:

print ("Это не число!")

В данном примере программа пытается конвертировать информацию введенную пользователем в тип float, если же при этом возникнет ошибка класса ValueError, то выводится строка "This is not a valid number". В блоке except мы можем задать те классы ошибок на которые данный блок должен сработать, если мы не укажем ожидаемый класс ошибок, то блок будет реагировать на любую возникшую ошибку.

-5

Блок try может содержать неограниченное количество блоков except:

?

1

2

3

4

5

6

7

try:

a = float(input("Введите число: ")

print (100 / a)

except ValueError:

print ("Это не число")

except ZeroDivisionError:

print ("На ноль делить нельзя")

-6

Кроме того мы можем добавить пустой блок except, который будет срабатывать на непредвиденную выше ошибку. Пустой блок except всегда должен идти последним:

?

1

2

3

4

5

6

7

8

9

try:

a = float(input("Введите число: ")

print (100 / a)

except ValueError:

print ("Это не число!")

except ZeroDivisionError:

print ("На ноль делить нельзя!")

except:

print ("Неожиданная ошибка.")

Блок else в блоке try-except в Python

Блоку except можно добавить необязательный блок else, который сработает в случае, если программа выполнилась без ошибок:

?

1

2

3

4

5

6

7

8

9

10

11

try:

a = float(input("Введите число: ")

print (100 / a)

except ValueError:

print ("Это не число!")

except ZeroDivisionError:

print ("На ноль делить нельзя!")

except:

print ("Неожиданная ошибка.")

else:

print ("Код выполнился без ошибок")

В результате, мы получим следующее.

-7

Блок finally в Python

Также у блока except есть еще один необязательный блок finally, который сработает независимо от того, выполнился код с ошибками или без:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

try:

a = float(input("Введите число: ")

print (100 / a)

except ValueError:

print ("Это не число!")

except ZeroDivisionError:

print ("На ноль делить нельзя!")

except:

print ("Неожиданная ошибка.")

else:

print ("Код выполнился без ошибок")

finally:

print ("Я выполняюсь в любом случае!")

Таким образом, используя обработку исключительных ситуаций, вы можете защитить программу от взлома, непредвиденного поведения и в будущем получить детальную информацию по логическим ошибкам, содержащимся в ней.