如何在Python中正确地弃用自定义异常?

2024-10-06 07:33:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我在Python项目中有自定义的继承异常,我想弃用其中一个。正确的做法是什么

我有例外情况:

class SDKException(Exception):
    pass

class ChildException(SDKException):
    pass

class ChildChildException(ChildException):  # this one is to be deprecated
    pass

我想反对ChildException,因为该异常在项目中被使用、引发并与其他异常链接


Tags: to项目is链接exceptionpassbethis
1条回答
网友
1楼 · 发布于 2024-10-06 07:33:38

您可以使用一个decorator,它在异常类的每个实例化上显示一个warningDeprecationWarning类别:

import warnings

warnings.filterwarnings("default", category=DeprecationWarning)

def deprecated(cls):
    original_init = cls.__init__
    def __init__(self, *args, **kwargs):
        warnings.warn(f"{cls.__name__} is deprecated", DeprecationWarning, stacklevel=2)
        original_init(self, *args, **kwargs)
    cls.__init__ = __init__
    return cls

class SDKException(Exception):
    pass


class ChildException(SDKException):
    pass

@deprecated
class ChildChildException(ChildException):  # this one is to be deprecated
    pass

try:
    raise ChildChildException()    
except ChildChildException:
    pass
app.py:7: DeprecationWarning: ChildChildException is deprecated

更新: 此外,还可以创建自定义警告类并将其传递给warn函数:

class ExceptionDeprecationWarning(Warning):
    pass
warnings.warn(f"{cls.__name__} is deprecated", ExceptionDeprecationWarning)

相关问题 更多 >