- Python爬虫、数据分析与可视化:工具详解与案例实战
- 成立明 胡书敏 黄勇
- 616字
- 2021-03-31 12:07:54
4.2.2 自定义异常且与except整合使用
在上文里,遇到业务场景异常时,我们抛出的是Exception这个异常处理的基类,只是在其中通过字符串定义异常的描述信息。在某些场景里,我们在抛出异常时,为了处理方便,或许还要指定错误码和处理人邮件等信息,对此我们可以通过自定义异常来实现此类需求。
在如下的DefineException.py范例中,我们自定义的异常类继承了Exception基类,并在其中定义了错误码等和异常处理相关的信息。而且,本范例还整合使用了raise和except,这样就不会因抛出异常而导致程序终止了。
01 # coding=utf-8 02 class OrderBusinessException(Exception): 03 def __init__(self,msg, errorCode, email): 04 self.msg = msg 05 self.errorCode = errorCode 06 self.email = email 07 08 def handleOrder(name,number): 09 if(number<=0): 10 raise OrderBusinessException('Order Number less than 0','100', 'xx@163.com') 11 else: 12 print('Handler Order Correctly') 13 handleOrder('PythonBook',1) # Handler Order Correctly 14 try: 15 handleOrder('PythonBook',-1) # 会触发异常,程序中断 16 except OrderBusinessException as e: 17 # 本except里的三句print语句会执行 18 print(e.msg) 19 print(e.errorCode) 20 print(e.email) 21 except Exception as e: 22 print(e) # 用Exception来兜底 23 print('continue') # 会继续执行后继代码
在第2行到第6行里,我们通过继承Exception定义了基于订单业务的OrderBusinessException异常处理类,在其中第3行的__init__构造方法里,通过参数指定了异常处理的相关信息。
在第8行的handleOrder方法里,当第9行的if语句判断订单数量小于等于零时,此时抛出的是自定义的OrderBusinessException异常,且在创建该异常时指定了错误描述信息、错误码和处理人邮件等信息。
而且,在第15行引发的异常被第16行的except从句成功处理,在该从句里,可以获取异常信息并做对应的处理。正是因为这里用except合理地处理了异常,所以能继续执行后面第23行的打印语句。
额外再说一句,这里除了用OrderBusinessException自定义异常、捕获并处理了可能出现的业务异常外,还在第21行用Exception类来兜底,避免因出现不可控异常而导致的程序终止情况。