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.sqlstate
是None
.
这甚至可能吗?有没有意想不到的缺点?
解决方案
推荐阅读
- python - Python 正则表达式匹配第一个和最后一个字符
- javascript - Konva hasIntersection js
- mysql - 无法连接到 AWS 上的 MySQL 服务器。AWS 表示拒绝访问客户端并将 AWS 主机名替换为本地 IPv4 地址
- python - 如何根据同一熊猫数据框中列的值复制行
- gatling - scala - Gatling - 我似乎无法在后续请求中使用从请求中存储的会话变量
- nginx - NGINX 无法重写 html
- python - 如何修复此代码以计算 Python 中的正确成本?
- java - 创建多个 Bean 时出错:是否存在无法解析的循环引用?
- docker - 使用 AWS ECR 设置 Docker 身份验证令牌的问题
- .net-core - 如何在 Windows 上的 .Net Core 中获取原始案例的实际文件路径(显然)?