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就会关闭,即使在处理行时产生问题。像文件这些对象,涉及到的提前清除行为在它们各自的文档中有描述。
相关文章推荐
- Python3.2官方文档翻译--模板
- Python3.2官方文档翻译--使用二进制数据记录布局和多线程
- Python3.2官方文档翻译-列表工具和十进制浮点数计算
- Python3.2 官方文档翻译--错误与异常
- Python3.2官方文档翻译--实例对象和方法对象
- Python3.2官方文档翻译-多重继承和私有变量
- Python3.2官方文档翻译--异常处理
- Python3.2官方文档翻译--迭代器
- Python3.2官方文档翻译--迭代器
- Python3.2官方文档翻译--输出格式化
- Python3.2官方文档翻译--实例对象和方法对象
- Python3.2官方文档翻译--异常抛出和自定义异常
- Python3.2官方文档翻译--文件读写
- Python3.2官方文档翻译--名称和对象相关术语
- Python3.2官方文档翻译--输出格式化
- Python3.2官方文档翻译--异常抛出和自定义异常
- Python3.2官方文档翻译---类一些说明
- Python3.2官方文档翻译--作用域和命名空间实例
- Python3.2官方文档翻译--作用域和命名空间
- Python3.2官方文档翻译--继承