:star2:模块 Module
程序可以拆分成以.py
结尾的模块,拆分相似的逻辑。
分开以后,把有关联的代码放在一起会更清晰,有利于合作开发。
不同文件之间的关联,将目标模块的成员导入到当前模块的作用域中。
1 | # 你过来,面向过程比较多,因为用的是文件名。 |
当名字有冲突的时候,遵循就近原则。但是我们要尽力避免冲突的产生。
常用的命名:
- BLL 业务逻辑层 business logic layer
- DAL 数据访问层 data access layer
- USL 用户显示层 user show layer
- model 模型层
- main 程序入口代码
__name__
显示模块名字,显示 __main__
的时候意思是主模块,也就是第一次运行的模块/不是被导入的模块。
python是解释型语言,但为了提高运行速度,让 python 程序更快启动,python使用了一种编译的方法。
源代码 –> 编译–> 字节码 – >解释 –> 机器码
编译之后得到pyc文件,也就是pychache文件,存储了字节码(特定于Python的表现形式)。
if __name__ == '__main__'
要求从当前文件启动。
在模块导入时,模块的所有语句会执行。如果一个模块已经导入,则再次导入时不会重新执行模块内的语句。
:star2:包 Packge
将模块以文件夹的形式进行分组管理。让一些相关的模块组织在一起,使逻辑结构更加清晰。
1 | # 语法 |
:star2:异常处理Error
异常是运行时检测到的错误。当异常发生时,程序不会再向下执行,而转到函数的调用语句。
- 名称异常(NameError):变量未定义。
- 类型异常(TypeError):不同类型数据进行运算。
- 索引异常(IndexError):超出索引范围。
- 属性异常(AttributeError):对象没有对应名称的属性。
- 键异常(KeyError):没有对应名称的键。
- 异常基类Exception。
raise
语句,主动抛出一个错误,让程序进入异常状态。在程序调用层数较深时,向主调函数传递错误信息要层层return比较麻烦,所以人为抛出异常,可以直接传递错误信息。
为了将程序由异常状态转为正常流程,我们使用以下语法进行异常处理:
1 | try: |
- as 子句是用于绑定错误对象的变量,可以省略。
- except子句可以有一个或多个,用来捕获某种类型的错误。
- else子句最多只能有一个。
- finally子句最多只能有一个,如果没有except子句,必须存在。
- 如果异常没有被捕获到,会向上层(调用处)继续传递,直到程序终止运行。