程序结构
模块 Module
- 定义:包含一系列数据、函数、类的文件,通常以.py结尾。
- 作用:让一些相关的数据,函数,类有逻辑的组织在一起,使逻辑结构更加清晰,有利于多人合作开发。
导入
- import
- 语法:
import 模块名 import 模块名 as 别名
- 作用:将某模块整体导入到当前模块中。
- 使用:模块名.成员
- from import
- 语法:
from 模块名 import 成员名[as 别名]
- 作用:将模块内的一个或多个成员导入到当前模块的作用域中。
- 使用:直接使用成员名
- from import *
- 语法:
from 模块名 import *
- 作用:将某模块的所有成员导入到当前模块。
- 模块中以下划线开头的属性,不会被导入,通常称这些成员为隐藏成员。
模块变量
__all__变量:定义可导出成员,仅对from xx import *语句有效。
__doc__变量:文档字符串。
__file__变量:模块对应的文件路径名。
__name__变量:模块自身名字,可以判断是否为主模块。
当此模块作为主模块(第一个运行的模块)运行时,__name__绑定’__main__’,不是主模块,而是被其它模块导入时,存储模块名。
加载过程
- 在模块导入时,模块的所有语句会执行。
- 如果一个模块已经导入,则再次导入时不会重新执行模块内的语句。
分类
- 内置模块(builtins),在解析器的内部可以直接使用。
- 标准库模块,安装Python时已安装且可直接使用sys,random。
- 第三方模块(通常为开源),需要自己安装。
- 用户自己编写的模块(可以作为其他人的第三方模块)。
包package
- 定义:将模块以文件夹的形式进行分组管理。
- 作用:让一些相关的模块组织在一起,使逻辑结构更加清晰。
导入
import 包名.模块名 [as 模块新名]
import 包名.子包名.模块名 [as 模块新名]
from 包名 import 模块名 [as 模块新名]
from 包名.子包名 import 模块名 [as 模块新名]
from 包名.子包名.模块名 import 成员名 [as 属性新名]
# 导入包内的所有子包和模块
from 包名 import *
from 包名.模块名 import *
init文件
- __init__.py
- 标记:是包内必须存在的文件。
- 会在包加载时被自动调用。
- __all__:记录from 包 import * 语句需要导入的模块。如果导入路径是一个包,那么需要在包的__init__.py模块中设置__all__属性
搜索顺序
内置模块 > sys.path 提供的路径
异常处理Error
异常
- 定义:运行时检测到的错误。
- 现象:当异常发生时,程序不会再向下执行,而转到函数的调用语句。
- 常见异常类型:
– 名称异常(NameError):变量未定义。
– 类型异常(TypeError):不同类型数据进行-运算。
– 索引异常(IndexError):超出索引范围。
– 属性异常(AttributeError):对象没有对应名称的属性。
– 键异常(KeyError):没有对应名称的键。
– 未实现异常(NotImplementedError):尚未实现的方法。
– 异常基类Exception。
处理
- 语法:
try: 可能触发异常的语句 except 错误类型1 [as 变量1]: 处理语句1 except 错误类型2 [as 变量2]: 处理语句2 except Exception [as 变量3]: 不是以上错误类型的处理语句 else: 未发生异常的语句 finally: 无论是否发生异常的语句
- 作用:将程序由异常状态转为正常流程。
- 说明:
- as 子句是用于绑定错误对象的变量,可以省略
- except子句可以有一个或多个,用来捕获某种类型的错误。
- else子句最多只能有一个。
- finally子句最多只能有一个,如果没有except子句,必须存在。
- 如果异常没有被捕获到,会向上层(调用处)继续传递,直到程序终止运行。
raise 语句
- 作用:主动抛出异常,快速传递错误信息。
- 目的:在程序调用层数较深时,向主调函数传递错误信息要层层return 比较麻烦,所以人为抛出异常,可以直接传递错误信息。。
自定义异常
- 定义:
class 类名Error(Exception): def __init__(self,参数): super().__init__(参数) self.数据 = 参数
- 调用:
try: raise 自定义异常类名(参数) except 定义异常类 as 变量名: 变量名.数据
- 作用:封装错误信息。