我希望能够扩展psycopg2.DatabaseError并执行以下处理:
psycopg2.DatabaseError
exc.diag.message_hint
),如果它等于我期望的值,则引发我自己的psycopg2.DatabaseError的自定义子类,以将原始异常的所有属性保留在我的新属性上实例。class MyCustomException(psycopg2.DatabaseError):
def additional_method(self):
""" Perform aditional logic """
...
try:
... # call database
except psycopg2.DatabaseError as exc:
if exc.diag.message_hint == 'my_expected_value':
# raise MyCustomException keeping the info from the exc
raise exc
这样,以后我可以根据异常类型在代码中执行一些自定义处理。
目前,我还没有成功。即使我尝试将属性手动复制到新实例(或在初始化时提供它们),我也无法像原始异常那样表现出它的行为(这就是我的目标):例如,即使尽管我将diag
对象从原始异常复制到新实例,但是新实例的diag.sqlstate
是None
。
这甚至可能吗?有意外的缺点吗?