您的位置:首页 > 编程语言 > Python开发

Python3.2官方文档翻译--清理动作

2014-04-22 22:21 603 查看

6.6 定义清除动作

Try语句中也可以其他可选择语句,这些语句被用来定义清除动作。这些动作无论在任何情况下都会执行。如下:

>>> try:

... raise KeyboardInterrupt

... finally:

... print(’Goodbye, world!’)

...

Goodbye, world!

KeyboardInterrupt

不管异常是否发生,Finally语句常常在离开try语句之前执行。当在try语句中异常发生并且还没来的except处理(或者它在except或else语句中发生),在finally语句执行之后也可以在此抛出异常。即使通过break,continue,或者return等其他任何子句,当要离开关键字try语句时finally也会被执行。一个稍微复杂的例子“

>>> def divide(x, y):

... try:

... result = x / y

... except ZeroDivisionError:

... print("division by zero!")

... else:

... print("result is", result)

... finally:

... print("executing finally clause")

...

>>> divide(2, 1)

result is 2.0

executing finally clause

>>> divide(2, 0)

division by zero!

executing finally clause

>>> divide("2", "1")

executing finally clause

Traceback (most recent call last):

File "<stdin>", line 1, in ?

File "<stdin>", line 3, in divide

TypeError: unsupported operand type(s) for /: ’str’ and ’str’

如你所见,无论任何情况finally语句都会执行。 两个字符串相除抛出的异常没有被except语句所处理,因此在finally语句后重新抛出。

在真实的应用中,finally语句对释放外部资源(文件或者网络连接)有很重要的意义,不管这些资源是否正确使用。

6.7 提前定义清理动作

一些对象定义了标准的清理行为,当这些对象不再使用时候,不管是否正确运用这个对象,这些行为都会执行。看看下面的例子,该例子用来打开一个文件把内容打印在屏幕上。

for line in open("myfile.txt"):

print(line)

这行代码的问题在于当执行完这段代码后,它让文件在一段不确定的时间里处于打开的状态。在简单的脚本中这不是个问题,但是在较大的应用中这是个重大的问题。

With语句让对象比如文件能以一种更加适当的方法被应用。它确保这些对象能正确和实时的清除。

with open("myfile.txt") as f:

for line in f:

print(line)

在这段语句执行之后,文件f就会关闭,即使在处理行时产生问题。像文件这些对象,涉及到的提前清除行为在它们各自的文档中有描述。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: