簡體   English   中英

通過python中的裝飾器生成異常類

[英]generating exception classes via decorators in python

在編碼時,我必須經常這樣做。

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出現,因此無論如何它都會給我 語法 名稱錯誤。 有沒有辦法以類似的方式在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'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM