В каком состоянии оператор print ('done') будет выполняться и не будет выполняться? - PullRequest
0 голосов
/ 03 июля 2019

Я немного запутался, что в этом случае будет выполняться блок finally вместе с оператором print('done'). Потому что, когда блок try будет выполнен, тогда только блок finally выполняется вместе с выводом, но когда есть какое-то исключение, тогда блок исключений будет выполняться вместе с блоком finally и print('done') заявление. Также, если мы напишем оператор print в блоке try, оператор print('done') будет выполняться все время. Как то так,

def division(x,y):
    try:
        return x/y
    except TypeError:
        print('error type')
    except ValueError:
        print('value error')
    finally:
        print('final')
    print('done')

division(23,4)

Выход: -

result  5.75
final
done

def division(x,y):
    try:
        return x/y
    except TypeError:
        print('type error')
    except ValueError:
        print('value error')
    finally:
        print('final')
    print('done')

division(23,4)

division('12',3)

Выход: -

final

error type
final
done

1 Ответ

1 голос
/ 03 июля 2019

с помощью return x/y вы вызываете остановку функции. Таким образом, если return x/y успешно, «done» не печатается. 'final' все еще печатается, потому что он находится в блоке finally, который выполняется безоговорочно.

Однако, если вы заставите return x/y создать TypeError или ValueError, ничего не будет возвращено, и вы перейдете в блоки исключений. После завершения блока исключений функция переходит к блоку finally и затем к print('done')

Таким образом, условие, при котором выполняется print('done'), является условием, в котором x или y не поддерживают действие деления.

...