try 语句有两种主要形式: try-except 和 try-finally . 这两个语句是互斥的,也就是说你
只能使用其中的一种. 一个 try 语句可以对应一个或多个 except 子句, 但只能对应一个
finally 子句, 或是一个 try-except-finally 复合语句.
你可以使用 try-except 语句检测和处理异常. 你也可以添加一个可选的 else 子句处理没
有探测到异常的时执行的代码. 而 try-finally 只允许检测异常并做一些必要的清除工作(无论
发生错误与否), 没有任何异常处理设施. 正如你想像的,复合语句两者都可以做到.
异常被迁移到了 new-style class 上,
启用了一个新的"所有异常的母亲", 这个类叫做 BaseException , 异常的继承结构有了少许调整,
为了让人们摆脱不得不除创建两个处理器的惯用法. KeyboardInterrupt 和 SystemExit被从
Exception 里移出, 和 Exception 平级:
BaseException
|- KeyboardInterrupt--用户按下了ctlr-c,想要关闭程序
|- SystemExit--当前应用程序需要退出
|- Exception
|- (all other current built-in exceptions) 所有当前内建异常
try-else 语句。
:在try 范围中没有异常被检测到时,执行else 子句.
try-finally 语句
.这个try-finally语句和try-except区别在于它不是用来捕捉异常的.作为替代,它常常用来维持一致的行为而无论异常是否发生.我们得知无论try中是否有异常触发,finally 代码段都会被执行
我们综合了这一章目前我们所见过的所有不同的可以处理异常的语法样式:
try:
try_suite
except Exception1:
suite_for_Exception1
except (Exception2, Exception3, Exception4):
suite_for_Exceptions_2_3_and_4
except Exception5, Argument5:
suite_for_Exception5_plus_argument
except (Exception6, Exception7), Argument67:
suite_for_Exceptions6_and_7_plus_argument
except:
suite_for_all_other_exceptions
else:
no_exceptions_detected_suite
finally:
always_execute_suite
上下文管理 with语句.这显然意味着只有内建了"上下文管理"的对象可以和with 一起工作.
一下这些对象支持with语句、
file
?? decimal.Context
?? thread.LockType
?? threading.Lock
?? threading.RLock
?? threading.Condition
?? threading.Semaphore
?? threading.BoundedSemaphore
file之前已经接触过了。
raise语句,Python 提供了一种机制让程序员明确的触发异常:这就是raise 语句
目前,有3 个直接从BaseException 派生的异常子
类:SystemExit,KeyboardInterrupt和Exception.其他的所有的内建异常都是Exception 的子类.表10.2中的每一层缩进都代表一次异常类的派生.
例:10.2 创建异常(myexc.py)
????这个实例暂时没看,等看到网络后再回头研究。
另一种获取异常信息的途径是通过sys 模块中exc_info()函数. 此功能提供了一个3 元组
(3-tuple)的信息, 多于我们单纯用异常参数所能获得. 让我们看看如何用sys.exc_info() :