In the document about sqlite3 package, it was suggested that when users are trying to create a table already exists, sqlite3.ProgrammingError is going to be thrown. However, the actual exception thrown is sqlite3.OperationalError, which is inconsistent with the document.
What OS and exact Python release? Can you post minimal code that verifies your claim? (Someone what have to verify with 3.10 also.)
This would strike me as an error in the code. We can fix 'wrong Exception' in the next release. I am not sure whether we would do so in a current release.
seeker-Liu commented on Dec 19, 2020
seeker-Liumannequin
MannequinAuthor
More actions
Python 3.9.1 (default, Dec 11 2020, 14:32:07)
[GCC 7.3.0] :: Anaconda, Inc. on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import sqlite3
>>> conn = sqlite3.connect("test.db")
>>> conn.execute("CREATE TABLE test (id INTEGER, str TEXT);")
<sqlite3.Cursor object at 0x7ff99f2df3b0>
>>> conn.execute("CREATE TABLE test (id INTEGER, str TEXT);")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
sqlite3.OperationalError: table test already exists
>>>
I think the reproduction is way too easy and has nothing special so I didn't include one at the very beginning. That's a simple reproduction on interactive console.
Error code 1 (SQLITE_ERROR, https://sqlite.org/rescode.html#error) is a generic sqlite3 error. Changing the default sqlite3 exception for this error code may not be what we want.
Anyway, we should clean up the exceptions emitted in the sqlite3 module. There are other inconsistencies apart from this.
The sqlite3 exception docs section has been rewritten in main (Python 3.12) by gh-27645, so this is considered fixed in main. I decided not to backport the docs update, because there's been a lot of work related to improving the exceptions raised by the sqlite3 extension module, and only parts of that work exists in 3.11, and even less in 3.10.
Activity
seeker-Liu commented on Dec 12, 2020
In the document about sqlite3 package, it was suggested that when users are trying to create a table already exists, sqlite3.ProgrammingError is going to be thrown. However, the actual exception thrown is sqlite3.OperationalError, which is inconsistent with the document.
Doc: https://docs.python.org/3/library/sqlite3.html#exceptions
terryjreedy commented on Dec 18, 2020
The doc is the same in 3.10.
What OS and exact Python release? Can you post minimal code that verifies your claim? (Someone what have to verify with 3.10 also.)
This would strike me as an error in the code. We can fix 'wrong Exception' in the next release. I am not sure whether we would do so in a current release.
seeker-Liu commented on Dec 19, 2020
I think the reproduction is way too easy and has nothing special so I didn't include one at the very beginning. That's a simple reproduction on interactive console.
erlend-aasland commented on Feb 12, 2021
Exception originates from _pysqlite_seterror() in Modules/_sqlite/util.c, line 64:
https://github.com/python/cpython/blob/master/Modules/_sqlite/util.c#L64
Error code 1 (SQLITE_ERROR, https://sqlite.org/rescode.html#error) is a generic sqlite3 error. Changing the default sqlite3 exception for this error code may not be what we want.
Anyway, we should clean up the exceptions emitted in the sqlite3 module. There are other inconsistencies apart from this.
erlend-aasland commented on Feb 12, 2021
Ref. gh-68327 (bpo-24139)
erlend-aasland commented on Feb 12, 2021
... and also gh-60583 (bpo-16379)
erlend-aasland commented on Feb 12, 2021
*error handling => exception emitted
erlend-aasland commented on Jun 8, 2022
The sqlite3 exception docs section has been rewritten in main (Python 3.12) by gh-27645, so this is considered fixed in main. I decided not to backport the docs update, because there's been a lot of work related to improving the exceptions raised by the sqlite3 extension module, and only parts of that work exists in 3.11, and even less in 3.10.
erlend-aasland commented on Jun 8, 2022
We could backport gh-27645 to 3.11, and possibly also 3.10, but it will be hairy.
erlend-aasland commented on Jun 15, 2022
I backported gh-27645 to 3.11 and 3.10:
I consider this issue resolved. If there are further inconsistencies, please open a new issue.