异常处理
什么是异常
异常是程序发生错误的信号,程序一旦出错就会抛出异常;特征是:程序的运行随即终止
为何需要处理异常
为了增强程序的健壮性,即便是程序运行过程中出错了,也不要终止程序
面对异常,代码中该如何处理
想好代码块中可能出错的几个点,精准捕捉可能出现的异常并处理,因为程序不能被终止,所以需要将出错信息记录到日志内,方便后续排查
异常的组成部分
异常由3部分组成
复杂点的异常,也抛不开组成部分!
异常的分类
语法上的错误:SyntaxError
逻辑上的错误:
一种是程序出错是可以被预知的
一种是预知不了的
对于我们能够预知的,就用异常进行捕获;但是一段代码中使用异常会降低代码的可读性,因此,能少用就少用,能不用就不用;什么时候可以不用呢,就是说当一段程序的代码只有这几条路可以走,那么我们就可以借助if多分支去对每一条路径进行处理;例如httprunner的实现
异常的语法
完整结构演示
结构拆分讲解
指定具体异常名称进行捕获
如果不同类型捕获之后,存在处理的异常逻辑相同,如下
可以改写成
其他不同的处理逻辑再单独写
对于其他的,不知道类型的异常,想用同一个逻辑进行处理,就可以使用一个万能的异常
try finally的单独用法
注意:即便try里面有return语句,finally最终也会运行
自定义异常与主动抛出异常 (raise)
1. 捕获异常
2. 自定义异常
import os
import requests, json
from common.ConstantUtil import DATA_DIR
from common.ExcelUtil import Excel
from common.LogUtil import log
class RequestMethodError(Exception):
"""
自定义方法异常异常
"""
def __init__(self, error_info):
super().__init__(self) # 初始化父类
self.error_info = error_info
def __str__(self):
return self.error_info
class HttpRequest(object):
"""直接发请求不记录cookies信息的 """
def __new__(cls, method, url, data=None, headers=None, tmp_json=None):
try:
if method.upper() not in ['GET', 'OPTIONS', 'HEAD', 'POST', 'PUT', 'PATCH', 'DELETE']:
raise RequestMethodError('传递的请求方法错误')
项目中的自定义异常常用方法:https://www.jb51.net/article/164084.htm
3. 传递异常(raise不使用参数)
捕捉到了异常,但是又想重新引发它(传递异常),可以使用不带参数的raise语句即可:
try:
a = 1 / 0
except Exception:
raise
本文来自博客园,作者:中州韵,转载请注明原文链接:https://www.cnblogs.com/zhongzhouyun/p/14967600.html