异常
在try..1.except.2..else 3,即如果1中捕获到异常,那么就执行except中的语句;如果1中没有捕获到异常,则执行else中的语句
可以用raise语句抛出一个异常
try...finally...语句用来表达这样的情况:
在程序中,如果一个段代码必须要执行,即无论异常是否产生都要执行,那么此时就需要使用finally。比如文件关闭,释放锁,把数据库连接返还给连接池等
如果try嵌套,那么如果里面的try没有捕获到这个异常,那么外面的try会接收到这个异常,然后进行处理,如果外边的try依然没有捕获到,那么再进行传递。。。
如果一个异常是在一个函数中产生的,例如函数A---->函数B---->函数C,而异常是在函数C中产生的,那么如果函数C中没有对这个异常进行处理,那么这个异常会传递到函数B中,如果函数B有异常处理那么就会按照函数B的处理方式进行执行;如果函数B也没有异常处理,那么这个异常会继续传递,以此类推。。。如果所有的函数都没有处理,那么此时就会进行异常的默认处理,即通常见到的那样
===========================================================================
模块和包的导入
import module1,mudule2... 导入模块
from 模块名 import 函数名1,函数名2.... 导入模块中的函数/类/全局变量
from 模块名 import * 引入模块中所有的东西
__all__ 只能限制from模块名 import *
__all__ 是一个列表
from 模块名 import * 中 只有在__all__里面的元素 才可以被被导入的模块的正常使用
当两个模块中含有相同名称函数的时候,后面一次引入会覆盖前一次引入。也就是说假如模块A中有函数function( ),在模块B中也有函数function( ),如果引入A中的function在先、B中的function在后,那么当调用function函数的时候,是去执行模块B中的function函数。
import 模块名 as 自定义名称。在当前模块中,调用模块中的函数/类/变量时,用自定义名称代替函数/类/变量名
当你导入一个模块,Python解析器对模块位置的搜索顺序是:
当前目录
如果不在当前目录,Python则搜索在shell变量PYTHONPATH下的每个目录。
如果都找不到,Python会察看默认路径。UNIX下,默认路径一般为/usr/local/lib/python/
模块搜索路径存储在system模块的sys.path变量中。变量里包含当前目录,PYTHONPATH和由安装过程决定的默认目录
python在执行一个文件时有个变量__name__
,当
__name__=’main’
时,表示,直接运行本模块,当等于模块名时,为运行导入了此模块的其他模块
包将有联系的模块组织在一起,即放到同一个文件夹下,并且在这个文件夹创建一个名字为__init__.py文件,__init__.py文件中的语句,导入是会自动执行。那么这个文件夹就称之为包
包可以有效避免模块名称冲突问题,让应用组织结构更加清晰