繁体   English   中英

如何从 pygresql 中捕获特定异常?

[英]How do I catch specific exceptions from pygresql?

我正在尝试改进我的错误处理,特别是我想处理来自 pygresql 的 IntegrityError 异常。

我收到错误“NameError: name 'IntegrityError' is not defined”所以我需要导入一些东西。 这可能吗? 我需要导入什么?

捕获您正在使用的模块引发的特定异常绝对是可能的,而且几乎总是可取的。

您是正确的,您需要从您正在使用的 package 导入该特定异常,因为它不是 python 内置异常的一部分。

查看pygresql 文档(大约 p.88) ,似乎大多数异常都是从pgdb模块引发的。

潜在地;

from pgdb import IntegrityError

# more code...

try:
  db.insert(obj) # or whatever data access methods you have
except IntegrityError as e:
  # handle the exception
  print(str(e))

或者它可能pgdb模块在pygresql模块内,所以它可能from pygresql.pgdb import IntegrityError 实际的导入路径可能会有所不同,但语法如上。

经过一天的大部分时间,我发现异常是在 pgdb 的 Connection object 中定义的(即使您使用的是 pg 接口)。 在这种情况下,我使用了 Flask 的 @app.errorhandler 装饰器,但它仍应显示需要导入的内容以及如何使用它。

from pgdb import Connection

@app.errorhandler(Connection.IntegrityError)
def handle_IntegrityError(e):
  return(str(e), 409)

如果 pygresql 将这些因素排除在外,那将会很有帮助,因为它会减少混乱。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM