是否可以捕获一个通用的Python DBAPI 2.0“DatabaseError”?

2024-04-19 04:22:36 发布

您现在位置:Python中文网/ 问答频道 /正文

“Python数据库API规范v2.0”文档(pep249)为数据库驱动程序抛出的与数据库错误相关的异常指定了DatabaseError基类。你知道吗

但据我所知,DB-API在Python中没有抽象实现。在这里,每个驱动程序都有自己单独的异常集,只是名称相同,这真的是这样吗?你知道吗

看看sqlite3模块的源代码,似乎确实如此!据我所知,C代码[初始化pysqlite\u DatabaseError](https://github.com/python/cpython/blob/c30098c8c6014f3340a369a31df9c74bdbacc269/Modules/_sqlite/module.c#L378)如下所示:

if (!(pysqlite_DatabaseError = PyErr_NewException(MODULE_NAME ".DatabaseError", pysqlite_Error, NULL))) {
    goto error;
}

…似乎是从pysqlite_Error继承的,而PyExc_Exception又从PyExc_Exception继承,我假设它对应于核心Python自己的Exception。你知道吗

我是不是漏了什么?这似乎是一个不幸的错误设计,它可能会从内部使用任意数据库驱动程序的API中冒出错误。你知道吗


Tags: 文档规范名称api数据库db错误驱动程序