自定义异常
2020-11-28 本文已影响0人
非鱼2018
1.最简单的自定义异常 之前可以打印详细出错信息
class UserDefinedError(Exception):pass
if 1==1:
print("自定义异常!")
raise UserDefinedError()
image.png
2自定义异常
class ValueNotAllPass(Exception):
def __init__(self,error,datas=None):
self.error = error
self.data=datas
def __str__(self):
return self.error+str(self.data) if self.data is not None else self.error
dict1={}
dict1['one']='pass'
dict1['two']='fail'
dict1['three']='fail'
if 'fail' in dict1.values():
for i in dict1:
print("{}:>>>{}".format(i,dict1[i]))
raise ValueNotAllPass('数据校验失败',dict1) #直接抛出自定义异常
# try:
# if 'fail' in dict1.values():
# for i in dict1:
# print("{}:>>>{}".format(i,dict1[i]))
# raise ValueNotAllPass('字典值不全为pass')
# except ValueNotAllPass: #捕获自定义异常
# pass
image.png
3.使用assert,再捕获AssertionError,然后抛出自定义异常
try:
assert all([i=='pass' for i in dict1.values()]),'不全为成功!'
except AssertionError:
print("不全为成功".center(30,'*'))
raise ValueNotAllPass('校验失败',dict1)
image.png
4异常退出
import sys
try:
sys.exit()
except SystemExit:
print("捕获到退出")
print('依然被执行')
#注册退出时执行方法
import atexit
def myexit():
print("只要结束就执行")
atexit.register(myexit)
sys.exit(0) #pycharm运行看效果,notebook没有反应
import os
os._exit(1) #直接中断,比如notebook直接服务就down掉了,系统级的,python脚本无法捕获异常