15

これは、Python 'with' ステートメントを使用しているときに例外をキャッチするという質問の続きです。
私はかなりの初心者で、GNU/linux で Python 3.2 を使用して次のコードをテストしました。

上記の質問では、「with」ステートメントから例外をキャッチするために、これに似たものが提案されました。

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

some_code が IOError をキャッチせずに発生させたらどうなるでしょうか? 明らかに外側の「except」ステートメントに引っかかっていますが、それは私が本当に望んでいたものではありませんでした。
大丈夫、some_code を別の try-except でラップする、などと言うことができますが、例外はどこからでも発生する可能性があり、コードのすべての部分を保護することは不可能であることを知っています。
要約すると、 open('foo.txt', 'a') で例外が発生した場合にのみ 'error' を出力したいので、次のコードが標準的な推奨方法ではない理由を尋ねるためにここにいます。これを行う:

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

with f:
    #
    # some_code
    #

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

ありがとうございました!

4

1 に答える 1

20
try:
    f = open('foo.txt', 'a')
except IOError:
    print('error')
else:
    with f:
        #
        # some_code
        #
于 2011-03-05T18:30:06.733 に答える