异常
逻辑代码和处理异常代码不放在一起
try:
except:
异常机制本质
异常处理成语在出现问题时依然可以正确的执行剩余的程序。不会因为异常终止程序
处理异常的类 异常类
异常类定义中包含了该类异常的信息和对异常进行处理的方法
异常也采用对象的方式来处理:
(1)抛出异常。,生成异常对象,停止当前执行路径,异常对象给解释器。
(2)捕获异常,解释器得到该异常后,寻找相应代码来处理异常
try except 基本结构
try:
被监控的可能引发异常的语句块
except BaseException[as e]: #BaseException[所有异常的根类,吧异常对象赋给e变量
异常处理语句块
try块包含着可能引发异常的代码,except块用来捕捉和处理发生的异常
try多个except结构
try:
被监控的语句块
except Exception1:
xxx
except Exception 2:
xxx
按照先子类后父类的顺序捕获异常
try except else
如有有异常执行except 没有异常执行else
try except finally 结构
finally 结构 无论是否发生异常都会执行,通常用来释放try块中申请的资源
return 结束方法运行、返回值 一般不放到异常处理结构中,放到方法最后
常见异常的解决
(1)SytaxError 语法错误
(2)NameError 尝试访问一个没有声明的变量
(3)ZeroDivisionError 除数为0 错误
(4) ValueError 数值错误
(5)TypeError 类型错误
(6)AttributeError 访问对象不存在的属性
(7)IndexError 索引越界异常
(8)KeyError 字典的关键字不存在
With 上下文管理
相对于finally块释放资源的代码,可以使用with上下文管理来释放资源。
with context_expr[as var]:
语句块
with代码块执行完毕后自动还原进入改代码之前的现场或上下文
在文件操作 网络通信相关的场合非常有用,不论是否有异常总能保证资源正常释放,极大的简化了工作
with open() as f:
traceback 模块
追溯
traceback_print_exc() 放在except 后面
还可以帮助我们把异常信息输出到文件中
自定义异常类
自定义异常类一般都是运行时异常,通常继承Exception 根类是BaseException 子类是Exception
用raise来主动抛出异常‘
if __name__ == "__main__" #如果为True 则模块是作为独立文件运行,可以执行测试代码
自定义异常类中定义__str__(self):
Pycharm 开发环境调试模式
调试器设置断点,debug step into step over