异常处理

什么是异常

异常是程序发生错误的信号,程序一旦出错就会抛出异常;特征是:程序的运行随即终止

为何需要处理异常

为了增强程序的健壮性,即便是程序运行过程中出错了,也不要终止程序

面对异常,代码中该如何处理

想好代码块中可能出错的几个点,精准捕捉可能出现的异常并处理,因为程序不能被终止,所以需要将出错信息记录到日志内,方便后续排查

异常的组成部分

异常由3部分组成

image.png

复杂点的异常,也抛不开组成部分!

image.png

异常的分类

语法上的错误:SyntaxError

image.png

逻辑上的错误:

一种是程序出错是可以被预知的
一种是预知不了的

对于我们能够预知的,就用异常进行捕获;但是一段代码中使用异常会降低代码的可读性,因此,能少用就少用,能不用就不用;什么时候可以不用呢,就是说当一段程序的代码只有这几条路可以走,那么我们就可以借助if多分支去对每一条路径进行处理;例如httprunner的实现

image.png

异常的语法

完整结构演示

image.png

结构拆分讲解

指定具体异常名称进行捕获

image.png

如果不同类型捕获之后,存在处理的异常逻辑相同,如下

image.png

可以改写成

image.png

其他不同的处理逻辑再单独写

image.png

对于其他的,不知道类型的异常,想用同一个逻辑进行处理,就可以使用一个万能的异常

image.png

try finally的单独用法

image.png

注意:即便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

posted @ 2021-07-03 21:26  中州韵  阅读(63)  评论(0编辑  收藏  举报