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() :