Исключения в 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!")