在Context Manager - Python期间发生捕获异常

时间:2012-11-18 14:08:12

标签: python python-3.x contextmanager

  

可能重复:
  Using python “with” statement with try-except block

我正在使用open在Python中打开文件。我将文件处理封装在with语句中:

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

这样我就确定我的文件已关闭,即使抛出了异常。

但是,我想处理打开文件失败的情况(抛出OSError)。 一种方法是将整个with块放在try:中。只要文件处理代码不引发OSError,就可以正常工作。

它可能看起来像:

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

这当然不起作用,真的很难看。有这样做的聪明方法吗?

由于

PS:我正在使用python 3.3

1 个答案:

答案 0 :(得分:11)

首先打开文件,然后将其用作上下文管理器:

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

with f:
    # other code, `f` will be closed at the end.