我想在Python中聲明用戶定義的異常的層次結構。不過,我希望我的頂級用戶定義類(TransactionException
)是抽象的。也就是說,我打算TransactionException
指定其子類需要定義的方法。但是,TransactionException
不應該被實例化或引發。可以在Python中聲明一個抽象異常嗎?
我有以下代碼:
from abc import ABCMeta, abstractmethod
class TransactionException(Exception):
__metaclass__ = ABCMeta
@abstractmethod
def displayErrorMessage(self):
pass
然而,上面的代碼可以讓我以實例TransactionException
...
a = TransactionException()
在這種情況下a
是沒有意義的,而應借鑑異常。下面的代碼刪除的事實,TransactionException
是Exception
一個子類...
from abc import ABCMeta, abstractmethod
class TransactionException():
__metaclass__ = ABCMeta
@abstractmethod
def displayErrorMessage(self):
pass
此代碼正確禁止實例化,但現在,因爲它不是一個Exception
下去,我不能提高TransactionException
一個子類。
可以在Python中定義一個抽象異常嗎?如果是這樣,怎麼樣?如果不是,爲什麼不呢?
注意:我使用Python 2.7,但會很樂意接受Python 2.x或Python 3.x的答案。
嚴格地說,你仍然可以實例化'TransactionException',你只是無法初始化它('exc = TransactionException .__ new __(TransactionException)'')。但這可能是OP所要求的精神。 – chepner