zoukankan      html  css  js  c++  java
  • 异常处理

    什么是异常

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

    为何需要处理异常

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

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

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

    异常的组成部分

    异常由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
    
    
  • 相关阅读:
    怎样进行产品定位(上)
    crm2011创建货币Money类型的字段
    Cocos2dx 3.0 过渡篇(二十九)globalZOrder()与localZOrder()
    Linux显示全部执行中的进程
    How to Copy and Paste in the Ubuntu Gnome Terminal
    [LeetCode] Summary Ranges
    【Python】 做一个简单的 http server
    使用Visual Studio创建简单的自己定义Web Part 部件属性
    【windows socket+TCPserverclient】
    ACM-经典DP之Monkey and Banana——hdu1069
  • 原文地址:https://www.cnblogs.com/zhongzhouyun/p/14967600.html
Copyright © 2011-2022 走看看