Звезда не активнаЗвезда не активнаЗвезда не активнаЗвезда не активнаЗвезда не активна
 

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