等效的旧样式代码为:
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
内部所有这些语句。