Day 9
Author: Denny YU
Created
文章目录
异常的本质,调试核心理念
什么是异常exception:
在程序运行中遇到各种各样的问题
坏处:
- 逻辑代码和错误代码放在一起
- 程序员本身需要考虑的东西特别多
怎么解决异常?
try except
机制
1. 异常机制的本质
程序中运行遇到困难;
异常处理是指出现问题是也能正常地运行
Python中有描述和处理异常的类,被称为异常类
处理过程
- 抛出异常:
- 捕获异常:解释器获得该异常后,寻找相关的代码来处理该异常
对待异问题的态度
- 细看信息,定位错误,看清楚报的错误信息,并定位发生错误的地方
- 百度并查看相关的帖子
- 求助吧
2. 异常解决的关键:定位
3. try…一个except结构
语法结构
try:
被监控可能发生引发异常的语句块
except BaseExeption [as e]:
异常处理语句块
跳过try代码块中异常以后的代码,不发生异常则跳过except之后的代码块
3. try…多个except结构
语法结构
try:
被监控的、可能引发异常的语句块
except Exception1:
处理Exception1的语句
except Exception2:
处理Exception2的语句
except BaseException:
处理可能遗漏的异常语句块
5. try…except…finally结构
finally块无论是否发生异常都会执行,通常用来释放try中申请的资源
6. try…except…else结构
对于没有异常的情况可以使用else
7. 常见异常汇总
- SyntaxError: 语法错误
- NameError:尝试访问没有申明的变量
- ZeroDivisionError:除数为0的错误
- ValueError:数值错误
- TypeError:类型错误
- AttributeError:访问对象的不存在属性
- IndexError 索引越界异常
- KeyError 字典的关键字不存在
更多的异常:
8. Traceback模块的使用——异常写入日志文件
traceback模块中 traceback.print_exc(file=)
把异常写入文件中
9. With上下文管理
with实现更方便的实现释放资源的操作
with context_expr []:
语句块
##example
with open("d:/bb.txt") as f:
for line in f:
print(line)
自定义异常类Raise抛出异常
class AgeError(Exception):
def __init__(self,errorInfo):
Exception.__init__(self)
self.errorInfo=errorInfo
def __str__(self):
return str(self.errorInfo)+",年龄错误!应该在1-150之间"
if __name__=="__main__":
age = int(input("请输入一个年龄:"))
if age<1 or age>150:
raise AgeError(age)
else:
print("正常的年龄:",age)