首页 > 解决方案 > 如何使用 pgerror 集引发 psycopg2 ProgrammingError?

问题描述

我有一个尝试,除了我执行语句的块,但它有可能引发 psycopg2 ProgrammingError。我已经将它设置为可以很好地处理错误,但我发现它很难模拟。我需要能够设置 ProgrammingError 的 pgerror 属性,但它是只读属性。

>>> e = ProgrammingError()
>>> e.pgerror = 'an error'

Traceback (most recent call last):
  File "<input>", line 1, in <module>
AttributeError: readonly attribute

我还尝试在创建错误时设置 pgerror 值

>>> e = ProgrammingError(pgerror='an error')

Traceback (most recent call last):
  File "<input>", line 1, in <module>
TypeError: ProgrammingError() takes no keyword arguments

还有另一种方法可以设置值吗?

标签: pythonpsycopg2

解决方案


我发现我可以使用 dunder setstate 来设置 pgerror 的值

e = ProgrammingError()
e.__setstate__({"pgerror": "an eror"})
raise e

然后当错误被捕获时,它会将 pgerror 属性设置为an error


推荐阅读