包(模块包) package
包是将模块以文件夹的形式组织分组的管理办法
包的作用:
1)将一系列模块进行分类管理,有利于防止命名冲突
2) 可以在需要时加载一个或部分模块而不是全部模块
import 子包:
包示例:
包名为: mypack
mypack/
__init__.py
menu.py
games/
__init__.py
contra.py
supermario.py
tanks.py
office/
__init__.py
excel.py
word.py
powerpoint.py
包的导入:
同模块的导入方法:
import 包名 [as 包别名]
import 包名.模块名 [as 模块新名]
import 包名.子包名.模块名 [as 模块新名]
from 包名 import 模块名 [as 模块新名]
from 包名.子包名 import 模块名 [as 模块新名]
from 包名.模块名 import 变量名 [as 变量新名]
from 包名 import *
from 包名.模块名 import *
....
搜索顺序:
1) 当前路径
2) sys.path
__all__属性:
作用:
用来记录哪些模块或子句需要导入
当用from 包 import * 语句导入时, 只查找__all__列表内的所有模块或子包
位置:要写在__init__.py中
__init__.py的作用:
1. 在包内添加文档字符串
2. 可以设置包的属性(__all__属性)
python调试器 pdb 模块
pdb模块:
作用:
用来调试程序
1)让程序单步执行,并跟踪程序的执行流程
2) 在运行时查看变量的值
在命令行加载pdb模块的方法:
$ python3 -m pdb 主模块文件
例:
$ python3 -m pdb student_info.py
pdb的调试命令:
q/quit 退出pdb调试器
l/list 列表源码
h/help 查看帮助
n/next 执行下一条语句
p 执行表达式并返回结果
s/step 进入到函数的内部,直到此函数返回
r/return 持续运行,直到此函数返回
c/cont/continue 继续执行,直到下一个断点
b/break [断点位置] 设置断点
cl/clear [断点号] 清除断点
w/where 打印函数调用栈
pdb断点的设置方法:
1) 文件名 : 行号
(Pdb) b student_info.py : 35
2) 当前文件行号
(Pdb) b 44
3) 函数名
(Pdb) b output_student
4) 模块名.函数
(Pdb)
b games.play
异常(第一部分) (exception)
什么是错误
指由于逻辑或语法等原因,程序无法正常执行.
错误的特点:
有些错误无法预知
什么异常:
异常是程序出错时标识的一种状态
当异常发生时,程序不会再向下执行,而转去调用此函数地方待处理此错误并恢复为正常状态
作用:
通知上层调用有错误产生需要处理
用异常作为信号通知调用者
try 语句
两种语法:
1) try-except语句
2) try-finally语句
1) try-except语法
try:
可能触发异常的语句:
except 错误类型 1 [as 变量1]:
异常处理语句1
except 错误类型 2 [as 变量2]:
异常处理语句2
except (错误类型3, 错误类型4,...) [as 变量4]:
异常处理语句3
....
except:
其它异常处理语句
else:
末发生异常语句
finally:
最终语句
作用:
捕获异常,将程序转为正常流程
try-except语法说明:
1. as 子句用于绑定错误对象的变量,可以省略
2. except 子句可以有一个或多个,但至少要有一个
3. else子句最多只能有一个,也可以省略不写
4. finally子句最多只能有一个,也可以省略不写
try-except执行流程:
1) 当try内的语句无错误时,执行正常流程,然后执行else子句和finally子句
2) 当try内的语句有异常发生时,所有正常流程终止,转去寻找包含此语句的try中的except部分。
如果类型匹配则转为正常流程,否则异常状态会向上层传递
3) 无论是否有异常发生,finally子句永远会执行
Python常用的错误类型
ZeroDivisionError 除(或取模)零
StopIteration 迭代器没有更多的值
ImportError 导入模块对象失败
GeneratorExit 生成器发生异常通知退出
IndexError 序列中没有此索引
IndentationError 缩进错误
ValueError 传入无效的参数
NameError 末声明/初始化对象
AttributeError 对象没有这个属性
AssertionError 断言语句失败
IOError 输入/输出操作失败
try-finally 语句
语法:
try:
可能触发异常的语句
finally:
最终语句
说明:
finally子句不可以省略
一定不存在except子句
作用:
通常用try-finally语句来做触发异常时必须要处理的事情
注:
try-finally语句不会改变程序的(正常/异常)状态
raise 语句:
作用:
生成一个错误, 让程序进入异常状态
语法:
raise 异常类型
或
raise 异常对象
assert 语句 (断言语句)
语法:
assert 真值表达式, 错误数据(通常是字符串)
作用:
当真值表达式为False时,用错误数据创建一个AssertionError类型的错误,并进入异常状态
等同于:
if not 真值表达式:
raise AssertionError(错误数据)