Перехват исключения при использовании оператора Python 'with' - Часть 2

это продолжение вопроса Перехват исключения при использовании оператора Python 'with' .
Я новичок и протестировал следующий код с Python 3.2 на GNU / linux.

В вышеупомянутом вопросе было предложено что-то похожее на это, чтобы поймать исключение из оператора 'with':

try:
    with open('foo.txt', 'a'):
        #
        # some_code
        #
except IOError:
    print('error')

Это заставляет меня задаться вопросом: что произойдет, если some_code вызовет ошибку IOError, не улавливая ее? Очевидно, это улавливается внешним заявлением «кроме», но это не могло быть тем, чего я действительно хотел.
Вы могли бы сказать хорошо, просто оберните some_code другим try-except и т. Д., Но я знаю, что исключения могут приходить отовсюду и невозможно защитить каждый фрагмент кода.
Подводя итог, я просто хочу напечатать 'error' тогда и только тогда, когда open ('foo.txt', 'a') вызывает исключение, поэтому я здесь, чтобы спросить, почему следующий код не является стандартным предлагаемым способом делаем это:

try:
    f = open('foo.txt', 'a')
except IOError:
    print('error')

with f:
    #
    # some_code
    #

#EDIT: 'else' statement is missing, see Pythoni's answer

Спасибо!

12
задан Community 23 May 2017 в 12:00
поделиться