子类psycopg2异常并重新引发自定义实例

时间:2020-09-16 12:04:59

标签: python-3.x psycopg2

我希望能够扩展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.sqlstateNone

这甚至可能吗?有意外的缺点吗?

0 个答案:

没有答案