You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python 2.7异常处理:如何获取SQLite异常错误码?

获取SQLite异常错误码的方法

嘿,我来帮你搞定这个问题!你现在用Exception捕获所有异常,虽然能拿到错误消息,但没法获取底层的SQLite错误码。要拿到像3 /* Access permission denied */这种格式的信息,你需要针对sqlite3的特定异常来捕获,并且利用它的内置属性。

关键步骤说明

  • 不要用泛化的Exception,改用sqlite3.Error(或它的子类,比如sqlite3.IntegrityError)来捕获数据库相关异常,这样能获取到更详细的错误元组。
  • sqlite3的异常对象ex的args属性是一个元组,其中通常包含两个元素:第一个是错误描述文本,第二个就是数字形式的SQLite错误码。

修改后的代码示例

import sqlite3

try:
    cur.execute("INSERT INTO `table` ('name','contact') VALUES(?,?)", ('name', 'contact',))
    con.commit()
except sqlite3.Error as ex:
    # 提取错误码和描述
    if len(ex.args) >= 2:
        error_code = ex.args[1]
        error_msg = ex.args[0]
        # 按照你想要的格式输出
        print("{} /* {} */".format(error_code, error_msg))
    else:
        # 兜底处理:如果某些情况只有错误消息,就输出原内容
        print(str(ex))

额外小提示

如果你想知道不同错误码对应的含义,可以直接查看sqlite3模块内置的常量,比如:

  • sqlite3.SQLITE_PERM对应数字3(权限拒绝)
  • sqlite3.SQLITE_CONSTRAINT对应数字19(约束失败,比如你遇到的UNIQUE约束问题)
    你可以通过print([attr for attr in dir(sqlite3) if attr.startswith('SQLITE_')])来列出所有内置的错误码常量。

内容的提问来源于stack exchange,提问作者AnamAnam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 04:07:00