python异常模拟工具类(异常生成工具类)

文章目录

主要是做测试的时候方便,

创建代码类

1、新建python文件exception_mock_utils.py,代码为:

python 复制代码
import random
import time
from typing import Any, Optional

class ExceptionMockUtils:
    """
    异常模拟工具类
    用于在开发或测试阶段模拟各种常见的程序异常
    """

    # --- 基础空值与逻辑异常 ---

    @staticmethod
    def mock_null_pointer(msg: str = "Attempted to access null reference"):
        """
        模拟 Java 风格的空指针异常 (Python 中对应 TypeError 或 AttributeError)
        """
        raise TypeError(msg)

    @staticmethod
    def mock_value_error(msg: str = "Invalid value provided"):
        """
        模拟参数值错误
        """
        raise ValueError(msg)

    @staticmethod
    def mock_key_error(key: Any = "missing_key"):
        """
        模拟字典键缺失异常
        """
        raise KeyError(key)

    @staticmethod
    def mock_index_error(index: int = 0):
        """
        模拟列表索引越界
        """
        raise IndexError(f"list index out of range: {index}")

    @staticmethod
    def mock_assertion_error(msg: str = "Assertion failed"):
        """
        模拟断言失败
        """
        raise AssertionError(msg)

    # --- 文件与 IO 异常 ---

    @staticmethod
    def mock_file_not_found(filepath: str = "/tmp/missing.txt"):
        """
        模拟文件未找到
        """
        raise FileNotFoundError(f"[Errno 2] No such file or directory: '{filepath}'")

    @staticmethod
    def mock_permission_denied(filepath: str = "/root/secret.txt"):
        """
        模拟权限拒绝
        """
        raise PermissionError(f"[Errno 13] Permission denied: '{filepath}'")

    # --- 网络与 API 异常 (模拟外部服务) ---

    @staticmethod
    def mock_timeout(seconds: float = 30.0):
        """
        模拟连接超时
        """
        raise TimeoutError(f"Connection timed out after {seconds} seconds")

    @staticmethod
    def mock_connection_refused(port: int = 8080):
        """
        模拟连接被拒绝
        """
        raise ConnectionRefusedError(f"Connection refused on port {port}")

    @staticmethod
    def mock_http_error(status_code: int = 500):
        """
        模拟 HTTP 错误 (需配合 requests 库或自定义异常)
        这里使用通用的 Exception 模拟
        """
        raise Exception(f"HTTP Error {status_code}: Internal Server Error")

    # --- 运行时与随机异常 ---

    @staticmethod
    def mock_runtime_error(msg: str = "Unexpected runtime error"):
        """
        模拟通用运行时错误
        """
        raise RuntimeError(msg)

    @staticmethod
    def mock_random_failure(rate: float = 0.5, msg: str = "Random failure occurred"):
        """
        模拟随机失败
        :param rate: 失败概率 (0.0 - 1.0)
        """
        if random.random() < rate:
            raise RuntimeError(msg)

    @staticmethod
    def mock_slow_down(delay: float = 3.0):
        """
        模拟服务响应过慢 (不抛异常,但模拟卡顿,常用于测试超时逻辑)
        """
        time.sleep(delay)
使用

创建python文件test_exception.py,代码如下:

python 复制代码
from exception_mock_utils import ExceptionMockUtils

exceptionMockUtils = ExceptionMockUtils()
exceptionMockUtils.mock_random_failure()

运行即可。

相关推荐
卷无止境9 小时前
给AI装上一双眼睛:快速构建代码验证器的思路与落地方案
后端·python
沫璃染墨9 小时前
从零入门计算机网络系列(十一):HTTP协议进阶——从重定向原理到GET/POST与Fiddler抓包
linux·服务器·开发语言·网络·c++·tcp/ip·html
维克兜率天9 小时前
【维克】指数调整:哪些股票会被“强制买入“?
人工智能·python·算法
刚入门的大一新生9 小时前
Linux-线程互斥
java·开发语言
come112349 小时前
Codex 下不同场景 模式选择
python
香芋芋圆9 小时前
iD-editor 详解|OSM官方在线编辑器,基于D3.js的轻量地图编辑器
开发语言·javascript·编辑器
神也畏惧菠萝10 小时前
Day08 Python流程控制从入门到上瘾:if/match/while/for四件套,从B站登录一路打到猜数字游戏
python·算法·数据存储·for·while·if·ifelse
言乐610 小时前
通过 3D 动画直观演示球形瓶内可滑动半圆机构在倾倒时防粘盖、回正时刮膏体的运动学过程
python·3d·django·virtualenv·pygame
quantdash_cc10 小时前
ETF 行情数据清洗实战:字段语义拆解、标的池整理与五个校验清单
python·数据分析·pandas·量化交易·股票数据·quantdash
小熊恋旧10 小时前
Python 面向对象编程:方法、属性、继承与多态详解
开发语言·python