python 的自定义异常、主动抛出异常与主动捕获异常

有时候 python 自带异常不够用,如同 java,python 也可以自定义异常,并且可以手动抛出。注意,自定义异常只能由自己抛出。python 解释器是不知道用户自定义异常是什么鬼的。

主动抛出异常

raise 语句

主动抛出异常。 

格式:

主动抛出异常终止程序 
raise 异常名称(‘异常描述’)

raise RuntimeError(‘testError’)

主动抛出这个异常,并加以解释。

自定义异常

python 的异常分为两种.

1、内建异常,就是 python 自己定义的异常。
2、不够用,用户自定义异常,

首先看看 python 的异常继承树

我们可以看到 python 的异常有个大基类。然后继承的是 Exception。所以我们自定义类也必须继承 Exception。

#最简单的自定义异常
class FError(Exception):
    pass

抛出异常、用 try-except 抛出

try:
    raise FError("自定义异常")
except FError as e:
    print(e)

在这里给一个简单的自定义异常类模版。


### 
class CustomError(Exception):
    def __init__(self,ErrorInfo):
        super().__init__(self) #初始化父类
        self.errorinfo=ErrorInfo
    def __str__(self):
        return self.errorinfo

if __name__ == '__main__':
    try:
        raise CustomError('客户异常')
    except CustomError as e:
        print(e)

主动捕获异常

#主动抛出异常,注意,当抛出异常后,如果不捕获处理,程序就会终止,不再往下执行
def raise_exception():
    raise selfException("sorry,i am a selfexception")

# raise_exception()

# 主动捕获异常,当捕获成功,并且处理异常的过程不再抛出异常,程序则会正常执行
def catch_exception():
    try:
        res = 1/0
    except ZeroDivisionError,e: # 必须要捕抓到对应的异常,才会进行处理
        try:
            raise_exception() # 这里会抛出一个异常,下面的语句不会执行
            print "i will not run"
        except selfException,e:
            print e
    finally:
        print "i will run alawys"
    print "hello"

在设计器中的使用

我们在设计流程规则时,有些操作需要主动抛出异常,并通过 except 来捕获这些异常,这里我们简单讲解一下主动抛出异常的方法

首先,加载必要的 try 组件
python 的自定义异常、主动抛出异常与主动捕获异常
在正常流程线中编写流程,当需要你主动抛出异常时,可以通过一个代码块来实现
python 的自定义异常、主动抛出异常与主动捕获异常

然后,我们就可以在异常流程中,来执行其他操作,比如发邮件等
当然,我们也可以通过 ** traceback** 来捕获这个异常,具体用法如下
python 的自定义异常、主动抛出异常与主动捕获异常

运行结果如下:
python 的自定义异常、主动抛出异常与主动捕获异常

使用 traceback 模块可以获取更加详细的异常信息,想详细了解的请参考这里