首页 > 解决方案 > 在“with”关键字打开资源期间捕获异常

问题描述

举个具体的例子,以psycopg2Postgres 为例(我知道mysql.connection有类似的 API):

try:
    with closing(connection.cursor()) as cursor:
        ... # run a transaction with cursor, like insert
except IntegrityError as e:
    cursor.rollback()

在这种情况下,游标是否能够回滚,或者在这种情况下发生回滚之前是否会关闭游标资源?

标签: pythonpostgresqlexceptionpsycopg2

解决方案


你能交换try:with ...吗?

with closing(connection.cursor()) as cursor:
    try:
        ... # run a transaction with cursor, like insert
    except IntegrityError as e:
        cursor.rollback()

except ...:这样,当到达时,光标将处于当前范围内。

使用您的代码,何时except ...:达到.cursorNone


推荐阅读