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
相关产品推荐
相关产品推荐

