博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python3.2官方文档翻译--清理动作
阅读量:4171 次
发布时间:2019-05-26

本文共 1389 字,大约阅读时间需要 4 分钟。

6.6 定义清除动作

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

>>> try:

... raise KeyboardInterrupt

... finally:

... print(Goodbye, world!)

...

Goodbye, world!

KeyboardInterrupt

不管异常是否发生,Finally语句常常在离开try语句之前执行。当在try语句中异常发生并且还没来的except处理(或者它在exceptelse语句中发生),在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就会关闭,即使在处理行时产生问题。像文件这些对象,涉及到的提前清除行为在它们各自的文档中有描述。

 

转载地址:http://hskai.baihongyu.com/

你可能感兴趣的文章
PostgreSQL数据库管理第九章备份恢复
查看>>
PostgreSQL数据库管理 第八章日常运维
查看>>
PostgreSQL数据库管理第十章Repmgr
查看>>
合适普通人的学习方法
查看>>
微服务Consul简介
查看>>
小富靠勤-大富靠命
查看>>
Linux使用技巧VNC
查看>>
PG数据库部署linux参数调整
查看>>
Linux shell正则表达式-sed-awk-grep应用
查看>>
linux系统管理—第五章Linux-bashshell
查看>>
PostgreSQL数据库管理 第二章体系结构
查看>>
PostgreSQL数据库管理 第三章实例管理与管理工具
查看>>
PostgreSQL数据库管理第七章流复制
查看>>
PostgreSQL数据库管理第十章Repmgr
查看>>
PostgreSQL数据库管理 第八章日常运维
查看>>
PostgreSQL数据库管理 第五章表空间管理
查看>>
PostgreSQL数据库管理第九章备份恢复
查看>>
PostgreSQL数据库管理数据导入导出
查看>>
MySQL数据库管理-体系结构
查看>>
MySQL数据库部署linux参数调整
查看>>