王振2020-6-3笔记

# #####  异常处理
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)









  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值