第七章 异常和模块
异常定义:
异常是指程序中的例外,违例。影响程序正常执行的情况。
异常机制是指程序出现错误后,程序的处理方法。
当出现错误后,程序的执行流程发生改变,程序的控制权转移到异常处理。
如果程序执行过程中发生了异常,我们没有进行异常处理。那么,程序就会中止执行下面的代码。如果我们进行了异常处理,程序会继续执行下面的代码
try:
#可能发生异常的代码
except:
#如果在try部分引发了’name’异常
exceptas:
#如果引发了’name’异常,获得附加的异常对象
else:
#如果没有异常发生
异常工作原理
try的工作原理是,当开始一个try语句后,python就在当前程序的上下文中作标记。当异常出现并捕获后继续执行后续的代码,try字句先执行,接下来会发生什么依赖于执行时是否出现异常。
1.如果当try的语句执行时发生异常,python就跳出try并执行第一个匹配该异常的except字句,异常处理完毕,控制流就通过整个try语句(除非在处理异常时又引发新的异常)
2.如果在try后的语句里发生了异常,却没有匹配到except字句,异常将被递交到上层的try,或者到程序的最上层(这样将结束程序,并打印缺省的出错信息)
3.如果在try子句执行时没有发生异常,python将执行else语句后的语句(如果有else的话),然后控制流通过整个try语句。
4.不管执行try语句是否发生异常,都将会执行finally语句块的语句。(如果有的话)
注意:捕获异常中可以再嵌套捕获异常,直到不会有新的异常发生为止。
except不带任何异常类型
1.except可以不带参数,表示捕获所有的异常;
2.except加了特定的参数,表示捕获特定的异常。
3.except参数可以有多个,每个参数间用逗号分隔
except带多种异常类型
可以使用一个except语句来处理多个类型异常,也可以针对不同的异常,分别写一个except语句。
try:
可能发生异常的代码
except(Exception1,[Exception2[,…ExceptionN]]):
如果发生了任何异常列表中发生的异常,将会执行这里的代码
else:
如果没有发生异常将会执行这里的代码
try –finally/else语句
在try块中抛出一个异常,程序会立即执行finally块代码(如果有的话)。当finally块中的所有代码被执行结束后,异常才会被再次提出,并执行except块代码。
finally和else语句块可以同时存在。如果发生异常只执行finally语句块,否则两语句块都会执行。
异常参数
一个异常可以带上参数,可作为输出的异常信息参数。通过except语句来捕获异常的参数。
异常参数接受的异常值通常包含在异常的语句中。在元组的表单中可以接收一个或者多个值。元组通常包含错误字符串,错误数字,错误位置。
触发异常
Python中使用关键字raise来自己触发异常。
自定义异常
通过创建一个新的异常类,程序可以创建它们自己特定的异常。自定义异常都需要继承异常基类(Exception类),当然也可以继承具体的异常类(例如RuntimeError),通过直接或者间接的方式
异常抛出机制
如果在运行时发生异常,解释器会查找相应的处理语句。(称为handler)2.
上层回调。如果当前无法处理,会将异常传递给上层的调用函数。
最外层还没找到的话,会打印traceback以便于让用户找到错误发生的原因。
Reload 在不终止Python程序的情况下,重新导入模块文件内容的方法
With 语句和断言
第二部分 模块
命名空间和作用域
标识符 变量是拥有匹配对象的名字。
命名空间 是一个包含了变量名称(键)和它们各自相应的对象的字典
全局变量在 函数内赋值 必须使用global关键字,声明该变量为全局变量。否则就会被认为是局部变量而重新开辟一段空间。
导入模块
Import 导入整个模块内容
Import module1,module2
使用import 可以一次性导入多个模块,模块间以逗号分隔
导入模块 from… import …
PythonPath
环境变量,PythonPath由装在一个列表里的许多目录组成
Globals()和locals函数
Globals()和locals()函数可被用来返回全局和局部命名空间里的名字