3

重複の可能性:
try-exceptブロックでpython「with」ステートメントを使用する

openPythonでファイルを開くために使用しています。withファイル処理を次のようなステートメントにカプセル化します。

with open(path, 'r') as f:
    # do something with f
    # this part might throw an exception

このようにして、例外がスローされた場合でも、ファイルが閉じられていることを確認します。

OSErrorただし、ファイルを開くことができない(anがスローされる)場合に対処したいと思います。これを行う1つの方法は、withブロック全体をに配置することtry:です。これは、ファイル処理コードがOSErrorをスローしない限り機能します。

次のようになります。

try:
   with open(path, 'rb') as f:
except:
   #error handling
       # Do something with the file

もちろんこれは機能せず、本当に醜いです。これを行うための賢い方法はありますか?

ありがとう

PS:私はPython3.3を使用しています

4

1 に答える 1

12

最初にファイルを開き、次にコンテキストマネージャーとして使用します。

try:
   f = open(path, 'rb')
except IOError:
   # Handle exception

with f:
    # other code, `f` will be closed at the end.
于 2012-11-18T14:10:03.977 に答える