You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
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 commentedon 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 commentedon 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 commentedon 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 commentedon 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 commentedon Feb 12, 2021
Ref. gh-68327 (bpo-24139)
erlend-aasland commentedon Feb 12, 2021
... and also gh-60583 (bpo-16379)
erlend-aasland commentedon Feb 12, 2021
*error handling => exception emitted
erlend-aasland commentedon Jun 8, 2022
The sqlite3 exception docs section has been rewritten in
main(Python 3.12) by gh-27645, so this is considered fixed inmain. 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 commentedon Jun 8, 2022
We could backport gh-27645 to 3.11, and possibly also 3.10, but it will be hairy.
erlend-aasland commentedon Jun 15, 2022
I backported gh-27645 to 3.11 and 3.10:
sqlite3exceptions (GH-27645) #93836sqlite3exceptions (GH-27645) #93838I consider this issue resolved. If there are further inconsistencies, please open a new issue.