1

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

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

4

2 回答 2

0

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

你是正确的,你需要从你正在使用的包中导入那个特定的异常,因为它不是 python 内置异常的一部分。

查看pygresql 文档(大约第 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. 实际的导入路径可能会有所不同,但语法如上。

于 2019-10-31T01:39:21.420 回答
0

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

from pgdb import Connection

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

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

于 2019-10-31T21:36:27.553 回答