gpt4 book ai didi

python - 在Python中通过装饰器生成异常类

转载 作者:太空宇宙 更新时间:2023-11-03 19:32:01 27 4
gpt4 key购买 nike

在编码时,我必须经常这样做;

class MyClassException(Exception):
def __init__(self, _message):
self.message = _message

class MyClass(object):
def __init__(self, value):
raise MyClassException("What's up?")

如果能够通过装饰器调用获得我的 Exception 类,那就太好了,因为所有这些从 Exception 继承的虚拟类除了名称之外没有什么唯一的。例如,以下内容就很好了;

 @generic_exception_class
class MyClass(object):
def __init__(self, value):
raise MyClassException("What's up?")

由于在调用装饰器之前无法使 MyClassException 存在,因此无论如何都会给我 syntax 名称错误。有没有办法在 python 中以类似的方式做到这一点?

最佳答案

这是一种可能性。请注意,异常类将是修饰类的成员,它不在全局范围内。

# The decorator
def class_with_exception(cls):
def init(self, _message=''):
self.message = _message
excname = 'ClsException'
excclass = type(excname, (Exception,), {'__init__': init})
setattr(cls, excname, excclass)
return cls

# example usage
@class_with_exception
class MyClass(object):
def __init__(self):
raise MyClass.ClsException('my message')

# raises and catches exception
try:
MyClass()
except MyClass.ClsException:
print 'catching exception'

关于python - 在Python中通过装饰器生成异常类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5348464/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com