python之路

自定义异常

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脚本无法捕获异常
上一篇下一篇

猜你喜欢

热点阅读