【问题标题】:How to raise a psycopg2 ProgrammingError with pgerror set?如何使用 pgerror 集引发 psycopg2 ProgrammingError?
【发布时间】:2019-08-07 12:50:36
【问题描述】:

我有一个 try except 块,我在其中执行一条语句,但它有可能引发 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

还有其他方法可以设置值吗?

【问题讨论】:

    标签: python psycopg2


    【解决方案1】:

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

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

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

    【讨论】:

    • 我也有类似的问题。但是,我想设置 e.diag.message_detail 的值。使用上面的 __setstate__() 方法我可以设置 pgerror 的值,我怎样才能为 e.diag.message_detail 实现相同的值?
    猜你喜欢
    • 1970-01-01
    • 2020-07-16
    • 2023-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-09
    • 2018-05-23
    • 1970-01-01
    相关资源
    最近更新 更多