- 您提供的两个代码块 不 相等
- 您描述为 旧的工作方式 的代码有一个严重的错误:如果打开文件失败,您将在
finally
子句中得到第二个异常, 因为f
它没有绑定。
等效的旧样式代码为:
try: f = open("file", "r") try: line = f.readline() finally: f.close()except IOError: <whatever>如您所见,该
with语句可以减少出错的可能性。在较新版本的Python(2.7,3.1)中,您还可以在一个
with语句中组合多个表达式。例如:
with open("input", "r") as inp, open("output", "w") as out: out.write(inp.read())除此之外,我个人认为尽早发现任何异常是一个坏习惯。这不是例外的目的。如果可能失败的IO功能是更复杂的操作的一部分,则在大多数情况下,IOError应该中止整个操作,因此应从外部进行处理。使用
with语句,您可以消除
try...finally内部所有这些语句。



