# ##### 异常处理
IndexError 索引超出序列的范围
lst = [1,2,3]
print(lst[100])
KeyError 字典中查找一个不存在的关键字
dic = {"a":1,"b":2}
print(dic["c"])
NameError 尝试访问一个不存在的变量
IndentationError 缩进错误
AttributeError 尝试访问未知的对象属性s
class MyClass():
a = 100
obj = MyClass()
obj.abc
StopIteration 迭代器没有更多的值
it = iter(range(3))
res = next(it)
res = next(it)
res = next(it)
res = next(it)
超出迭代次数范围
AssertionError 断言语句(assert)失败
多用于测试使用
assert 断言
就是猜,猜一猜后面的表达式是否正确,
如果猜对了,什么反应也没有,如果猜错了,直接报错
跟if有点类似
if 判定时选择执行或者不执行 assert 判定时选择报错或者不报错
<---------------------------------------------------------------------------->
## ###### 异常处理的基本方法
(1) 基本语法
try .. except
把有问题的代码放到try这个代码块中
如果出现了异常,直接执行except这个代码块
作用:防止异常错误,终止程序
例如:
try:
lst = [1,2,3,4]
print(lst[100])
except:
print("这里有异常错误")
(2) 带有分支条件的异常处理
except + 异常错误类
特指在发生这类异常错误时,要执行的分支
(3) 处理迭代器的异常错误
定义一个迭代器(迭代器一定是可迭代对象,但可迭代对象不一定是迭代器)
try:
res = next(gen)
res = next(gen)
res = next(gen)
except StopIteration as e:
这里面e跟fp一样,都是起个别名
__str__两种触发情况,1. print(对象) 2. str(对象)
(4) 异常处理的其他写法
1.try..finally
不论是否报错,都必须执行
2.try..except else
如果try代码块没有报错,就执行else这个分支,如果有报错,就不执行else分支
3.for或者while else
遇到break终止,不执行else后面的代码
<-------------------------------------------------------------------------->
# ##### 主动抛出异常 raise
raise + 异常错误类 or 异常错误类对象
基本语法:
try:
raise BaseException
except BaseException:
pass
BaseException 是所有异常类的父类(基类,超类) (子类,衍生类)
Exception 常规异常类的父类
object 是所有类的父类
# ##### 自定义异常类
MyException(BaseException)
必须继承异常父类
系统底层获取行数和文件名的函数只有在异常时才能触发
class MyException(BaseException):
def __init__(self,num,msg,line,file):
self.num = num
self.msg = msg
self.line = line
self.file = file
wang = "王振真帅"
try:
if wang == "王振真帅":
raise MyException(404,"王振牛皮",get_value(1),get_value(2))
def get_value(n):
try:
raise
except:
return return_errorinfo(n)
except MyException as e:
print(e.num)
print(e.msg)
print(e.line)
print(e.file)
王振2020-6-3笔记
最新推荐文章于 2020-06-28 19:26:16 发布