python类编写的异常

1 python类编写的异常

python类编写的异常,可以按组织分类,便于使用和维护,可以附加异常信息,支持继承。

except列出超类名字,匹配该超类实例及超类的子类的实例。

1.1 自定义异常类例子

用法

class SupExc(Exception): pass

描述

自定义异常类继承Exception,创建自定义异常类的实例触发异常。

(1) 自定义一个异常类,继承Exception超类;

(2) 创建自定义异常类的实例,通过raise主动触发;

(3) 通过sys.exc_info()获取异常信息;

示例

>>> import sys
>>> class SupExc(Exception): pass
>>> class SubExc1(SupExc): pass
>>> class SubExc2(SupExc): pass
>>> def rf1(): 
    x=SupExc()
    raise x
>>> def rf2():
    x=SubExc1()
    raise x
>>> def rf3():
    x=SubExc2()
    raise x
>>> for func in (rf1,rf2,rf3):
    try:
        func()
    except SupExc:
    # except列出超类SupExc,匹配超类 SupExc 及其子类的实例
        print('异常类:',sys.exc_info()[0]) # sys.exc_info 列出异常信息

异常类: <class '__main__.SupExc'>
异常类: <class '__main__.SubExc1'>
异常类: <class '__main__.SubExc2'>

>>> for func in (rf1,rf2,rf3):
    try:
        func()
    except SupExc as se:
    # se.__class__ 获取实例 se 所属类
        print('异常类:',se.__class__)
异常类: <class '__main__.SupExc'>
异常类: <class '__main__.SubExc1'>
异常类: <class '__main__.SubExc2'>

1.2 异常类重载打印

用法

def __str__(self):
    pass

描述

创建异常类实例对象送入的构造函数参数会保存到args元组。

重载__str__()方法,定制打印异常类信息。

示例

>>> raise TypeError
Traceback (most recent call last):
  File "", line 1, in <module>
    raise TypeError
TypeError
>>> raise TypeError('类型错误')
Traceback (most recent call last):
  File "", line 1, in <module>
    raise TypeError('类型错误')
TypeError: 类型错误
>>> te=TypeError('类型错误')
# 构造函数参数保存到args元组
>>> te.args
('类型错误',)
>>> class PriExc(Exception):pass
>>> pe=PriExc('梯阅线条')
>>> pe.args
('梯阅线条',)

>>> class RelStrExc(Exception):
    # 重载__str__()方法,定制打印异常类信息。
    def __str__(self):
        return '重载str:{},{}'.format(self.__class__.__name__,self.args)
>>> rse=RelStrExc('梯阅线条',9555)
>>> try:
    raise rse
except RelStrExc as r:
    print(r,r.args)
重载str:RelStrExc,('梯阅线条', 9555) ('梯阅线条', 9555)

1.3 访问异常信息

用法

try:
    pass
except 异常 as v:
    v.x

描述

(1) 重载构造函数__init__(),保存异常信息;

(2) 通过as将异常实例赋值给变量v,通过变量v访问异常信息。

示例

>>> class FileFormatErr(Exception):
    def __init__(self,line,fpath):
        self.line=line
        self.fpath=fpath
>>> def parse_file():
    raise FileFormatErr(95,r'ls.txt')
>>> try:
    parse_file()
except FileFormatErr as ffe:
    print('发生错误在',ffe.fpath,ffe.line)
发生错误在 ls.txt 95

1.4 调用异常方法

用法

class FileFormatErr(Exception):
    def __init__(self):
        pass
    def logerr(self):
        pass

异常类定义异常方法,在异常处理器进行调用。

(1) 异常类定义方法;

(2) 通过as将异常实例赋值给变量v,通过变量v调用异常方法。

示例

>>> class FileFormatErr(Exception):
    logf=r'E:\documents\F盘\formaterr.txt'
    def __init__(self,line,fpath):
        self.line=line
        self.fpath=fpath
    def logerr(self):
        errs='有错误在:{},{}'.format(self.fpath,self.line)
        print(errs)
        with open(self.logf,'a') as lf:
            lf.write(errs)

>>> def parse_file():
    raise FileFormatErr(95,r'ls.txt')

>>> try:
    parse_file()
except FileFormatErr as ffe:
    ffe.logerr()

有错误在:ls.txt,95
>>> open(r'E:\documents\F盘\formaterr.txt').readline()
'有错误在:ls.txt,95'

你可能感兴趣的:(python,python)