Исключения в Python. Обработка исключений (ошибок) в Python необходима для того, чтобы программа продолжала свою работу после корректного выведения сообщения об ошибке (при необходимости можно такое сообщение и не выводить, но обработать сообщение нужно, чтобы код продолжал выполняться). Если исключения не обработать, Python выведет системную ошибку и выполнение программы после ошибки остановится.
Необходимо реализовать возврат к последующему коду в блоке try после обработки в нём исключения в Python.
Возврат к коду в try после обработки в нём исключения в Python
Задача: возврат к текущему шагу цикла (или просто к коду) в блоке try после обработки в нём исключения.
Простые примеры для обработки исключения описываем столбиком в блоке try. Для поиска и обработки ошибок (например, деление на ноль) в блоке except прописываем обработку данного исключения (ошибки). Но по правилам обработки блока try-except после обработки исключения программа выйдет из этого блока и продолжится далее. По этой причине код, который находится в блоке try-except после исключения обрабатываться не будет.
После долгих попыток получилось решить задачу самым простым путём, но, скорее всего, он неправильный, так как получился очень большой код повторяющимися блоками try-except. Посмотрим это на примере простого калькулятора, где вычисление простых арифметических задач должно продолжиться даже после обработки исключения деления на ноль.
class MyException:
a=15
b=0
c=5
d=10
try:
print(a+b+c)
except ZeroDivisionError as error:
print("You can not divide by zero")
try:
print(a-b-c)
except ZeroDivisionError as error:
print("You can not divide by zero")
try:
print(a/c)
except ZeroDivisionError as error:
print("You can not divide by zero")
try:
print(a/b)
except ZeroDivisionError as error:
print("You can not divide by zero")
try:
print(a+b+c+d)
except ZeroDivisionError as error:
print("You can not divide by zero")
try:
print(a-b-c-d)
except ZeroDivisionError as error:
print("You can not divide by zero")
print("Stop calculation!")
Есть ещё один возможный вариант решения данной задачи.
Возврат к циклу после обработки в нём исключения
При помощи цикла можно также обработать исключения таким образом, что код в блоке try после выведения ошибки продолжит своё выполнение и программа не выйдет из блока try-except, как это происходит обычно.
Пример простой — всё тот же калькулятор. Сначала прописываем переменные, с которыми будет работать и решать простейшие арифметические действия. Затем в созданном классе необходимо определить метод, в котором прописываем каждому арифметическому примеру переменную со значением от 1 до 6. Создаём экземпляр класса, как обычно. Затем прописываем цикл (итератор) при помощи конструктора цикла for и не забываем обработать исключение (деление на ноль).
a=15, b=0, d=10, c=5, z=0
class MyException:
def vozvrat(self,oper):
if oper == 1:
z = a+b+c
elif oper == 2:
z = a-b-c
elif oper == 3:
z = a/c
elif oper == 4:
z = a/b
elif oper == 5:
z = a+b+c+d
elif oper == 6:
z = a-b-c-d
else:
z = 255
return z
test=MyException()
for i in range(1,7):
try:
z = test.vozvrat(i)
print(i,' = ',z)
except ZeroDivisionError as error:
print("You can not divide by zero")
print("Stop calculation!")
Возврат к циклу после обработки исключения
Аналогично также можно решить данную задачу с циклом while. На примере ниже всё ясно, аналогично коду выше. В данном случае цикл работает до тех пор, пока переменная i меньше 6, после каждого прохода к переменной добавляется единица.
a=15
b=0
d=10
c=5
z=0
class MyException:
def vozvrat(self,oper):
if oper == 1:
z = a+b+c
elif oper == 2:
z = a-b-c
elif oper == 3:
z = a/c
elif oper == 4:
z = a/b
elif oper == 5:
z = a+b+c+d
elif oper == 6:
z = a-b-c-d
else:
z = 255
return z
test=MyException()
i=0
while i<6:
try:
i = i + 1
z = test.vozvrat(i)
print(i,' = ',z)
except ZeroDivisionError as error:
print("You can not divide by zero")
print("Stop calculation!")
