Поймать исключение при использовании оператора Python «with» - часть 2 - PullRequest
12 голосов
/ 05 марта 2011

это продолжение вопроса Поймать исключение при использовании оператора 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 другой попыткой-исключения и так далее, но я знаю, что исключения могут происходить извезде и невозможно защитить каждый фрагмент кода.
Подводя итог, я просто хочу напечатать '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

Спасибо!

1 Ответ

14 голосов
/ 05 марта 2011
try:
    f = open('foo.txt', 'a')
except IOError:
    print('error')
else:
    with f:
        #
        # some_code
        #
...