令我遗憾的是,我无法弄清楚如何处理python'with'语句的异常 . 如果我有一个代码:
with open("a.txt") as f:
print f.readlines()
我真的想处理“文件未找到异常”以便进行处理 . 但我不能写
with open("a.txt") as f:
print f.readlines()
except:
print 'oops'
并且不能写
with open("a.txt") as f:
print f.readlines()
else:
print 'oops'
在try / except语句中包含'with'不起作用:不引发异常 . 为了以Pythonic方式处理'with'语句中的失败,我该怎么办?
4 回答
如果您希望对打开调用与工作代码中的错误进行不同的处理,您可以执行以下操作:
利用
with
语句执行此操作的最佳方法在PEP 343中列为示例#6,它给出了语句的背景 .使用如下:
with语句在没有
__future__
import since Python 2.6的情况下可用 . 您可以将其作为early as Python 2.5(但此时需要升级!):这里's the closest thing to correct that you have. You'几乎在那里,但
with
没有except
条款:上下文管理器的
__exit__
方法,如果它返回False
将在完成时重新加载错误 . 如果它返回True
,它将禁止它 .open
内置的__exit__
不返回True
,所以你只需要在try中嵌套它,除了块:标准样板:不要使用__82767_来捕获
BaseException
以及其他所有可能的异常和警告 . 至少与Exception
一样具体,对于这个错误,也许赶上IOError
. 只捕获您准备处理的错误 .所以在这种情况下,你会这样做:
另一种方法是检查文件是否先存在,然后继续
with
语句 . 例: