exceptionx

English | 中文

exceptionx 是一个灵活且便捷的Python异常处理库,允许你动态创建异常类,并提供多种异常处理机制。

exceptionx 的前身是 gqylpy-exception

pip3 install exceptionx

动态创建异常

使用 exceptionx,你可以在需要时即时创建异常类,而无需提前定义。例如,如果你希望抛出一个名为 NotUnderstandError 的异常,只需导入库并以如下方式调用:

import exceptionx as ex

raise ex.NotUnderstandError(...)

在这里,NotUnderstandError 并不是 exceptionx 预先定义的,而是在你尝试访问 e.NotUnderstandError 时通过魔化方法 __getattr__ 动态创建的。这种灵活性意味着你可以根据需要创建任何名称的异常类。

此外,exceptionx 还确保不会重复创建相同的异常类。所有已创建的异常类都会被存储在 e.__history__ 字典中,以便后续快速访问。

还有一种用法,导入即创建:

from exceptionx import NotUnderstandError

raise NotUnderstandError(...)

强大的异常处理功能

exceptionx 还提供了一系列强大的异常处理工具:

  • TryExcept: 装饰器,捕获被装饰的函数中引发的异常,并将异常信息输出到终端(不是抛出)。这有助于避免程序因未处理的异常而崩溃。
  • Retry: 装饰器,同上,并会尝试重新执行,通过参数控制次数和每次重试之间的间隔时间,在达到最大次数后抛出异常。
  • TryContext: 上下文管理器,使用 with 语句,你可以轻松捕获代码块中引发的异常,并将异常信息输出到终端。

使用 TryExcept 处理函数中引发的异常

from exceptionx import TryExcept

@TryExcept(ValueError)
def func():
int('a')

默认的处理方案是将异常简要信息输出到终端,不会中断程序执行。当然,也可以输出到日志或做其它处理,通过参数控制。

根据 Python 编程规范,处理异常时应明确指定异常类型。因此,在使用 TryExcept 装饰器时,需要明确传递所处理的异常类型。

使用 Retry 重试函数中引发的异常

from exceptionx import Retry

@Retry(sleep=1, count=3)
def func():
int('a')

若被装饰的函数中引发了异常,会尝试重新执行被装饰的函数,默认重试 Exception 及其所有子类的异常。像上面这样调用 Retry(sleep=1, count=3) 表示最大执行3次,每次间隔1秒。

Retry 可以配合 TryExcept 使用,将先重试异常,若重试无果,则在最后处理异常:

from exceptionx import TryExcept, Retry

@TryExcept(ValueError)
@Retry(sleep=1, count=3)
def func():
int('a')

使用 TryContext 处理上下文中引发的异常

from exceptionx import TryContext

with TryContext(ValueError):
int('a')

通过 exceptionx,你可以更加灵活和高效地处理Python程序中的异常,提升代码的健壮性和可靠性。

exceptionx:灵活便捷的Python异常处理库,让异常处理更高效!的更多相关文章

  1. [python标准库]XML模块

    1.什么是XML XML是可扩展标记语言(Extensible Markup Language)的缩写,其中的 标记(markup)是关键部分.您可以创建内容,然后使用限定标记标记它,从而使每个单词. ...

  2. python第六天 函数 python标准库实例大全

    今天学习第一模块的最后一课课程--函数: python的第一个函数: 1 def func1(): 2 print('第一个函数') 3 return 0 4 func1() 1 同时返回多种类型时, ...

  3. Python可视化库

    转自小小蒲公英原文用Python可视化库 现如今大数据已人尽皆知,但在这个信息大爆炸的时代里,空有海量数据是无实际使用价值,更不要说帮助管理者进行业务决策.那么数据有什么价值呢?用什么样的手段才能把数 ...

  4. Python标准库、第三方库和外部工具汇总

    导读:Python数据工具箱涵盖从数据源到数据可视化的完整流程中涉及到的常用库.函数和外部工具.其中既有Python内置函数和标准库,又有第三方库和工具. 这些库可用于文件读写.网络抓取和解析.数据连 ...

  5. Python 标准库、第三方库

    Python 标准库.第三方库 Python数据工具箱涵盖从数据源到数据可视化的完整流程中涉及到的常用库.函数和外部工具.其中既有Python内置函数和标准库,又有第三方库和工具.这些库可用于文件读写 ...

  6. 140种Python标准库、第三方库和外部工具

    导读:Python数据工具箱涵盖从数据源到数据可视化的完整流程中涉及到的常用库.函数和外部工具.其中既有Python内置函数和标准库,又有第三方库和工具. 这些库可用于文件读写.网络抓取和解析.数据连 ...

  7. 常用python机器学习库总结

    开始学习Python,之后渐渐成为我学习工作中的第一辅助脚本语言,虽然开发语言是Java,但平时的很多文本数据处理任务都交给了Python.这些年来,接触和使用了很多Python工具包,特别是在文本处 ...

  8. [Python] 机器学习库资料汇总

    声明:以下内容转载自平行宇宙. Python在科学计算领域,有两个重要的扩展模块:Numpy和Scipy.其中Numpy是一个用python实现的科学计算包.包括: 一个强大的N维数组对象Array: ...

  9. python常用库

    本文由 伯乐在线 - 艾凌风 翻译,Namco 校稿.未经许可,禁止转载!英文出处:vinta.欢迎加入翻译组. Awesome Python ,这又是一个 Awesome XXX 系列的资源整理,由 ...

  10. [resource]Python机器学习库

    reference: http://qxde01.blog.163.com/blog/static/67335744201368101922991/ Python在科学计算领域,有两个重要的扩展模块: ...

随机推荐

  1. 音视频-YUV数据格式

    一.YUV格式 1)kCVPixelFormatType_420YpCbCr8PlanarFullRange = 'f420' 对应YUV I420格式 2)kCVPixelFormatType_42 ...

  2. iOS 如何保持线程一直在运转

    1.简单的可以想到,写一个while循环 while (TRUE) { } 但是这种方式存在缺陷,将导致CPU占用100%,两个核. p.p1 { margin: 0; font: 12px &quo ...

  3. 8.14考试总结(NOIP模拟39)[打地鼠·竞赛图·糖果·树]

    一举一动,都是承诺,会被另一个人看在眼里,记在心上的. T1 打地鼠 解题思路 数据范围比较小,不需要什么优化. 直接二维前缀和枚举右下角端点就好了. code #include<bits/st ...

  4. 【Effective C++】设计与声明——考虑写出一个不抛异常的swap函数

    wap是个有趣的函数.原本它只是STL的一部分,而后成为异常安全性编程的脊柱,以及用来实现自我赋值可能性的一个常见机制.所谓swap两对象值,就是将两对象的值交换. 典型实现 缺省情况下的swap动作 ...

  5. k8s——pod生命周期

    图解 Pod生命周期 Pod的退出流程 Endpoint删除pod的ip地址 Pod变成Terminating状态 变为删除中的状态后,会给pod一个宽限期,让pod去执行一些清理或销毁操作 配置参数 ...

  6. INTEL S4500 960G 入手评测

    INTEL S4500 960G 入手评测 简易上个图: CDI AS SSD: CDM: AS SSD AND CDM: -

  7. 使用edge浏览器时,怎么让alt+tab不切换他的子标签页而只在程序间切换?

    使用搜索按钮(WIN+Q),搜索"多任务设置",在弹出的窗口中看到"alt+tab"相关设置.选择"仅打开的窗口",ok搞定.

  8. cent browser 百分浏览器不能使用剪切板复制粘贴

    cent browser 百分浏览器不能使用剪切板复制粘贴,查看剪切板的文本和图像. 解决方法: 1.进入设置-隐私设置和安全性-网站设置 2.查看各网站的权限及储存的数据 3.搜索你的网站,点击重置 ...

  9. Linux设置时区

    引言 在linux安装好了过后,如果时区不正确,需要手动地对它设置我们需要的时区 设置 控制台输入tzselect,回车 tzselect 2.然后选择 5 "Asia" 亚州,回 ...

  10. java中判断一个String字符串或字符数组中包含某个字段

    /** * 判断String字符串中包含某个字段 * @param oriStr 原始字符串 * @return */ private static boolean findString(String ...