Я хотел бы получить ясность о намерениях исключений в модуле sqlite3 в python.В частности, исключения, которые я вижу, не соответствуют цели в документах .
Например, в документах говорится, что sqlite3.ProgrammingError
- это
... возникает для ошибок программирования, например, таблица не найдена или уже существует, синтаксическая ошибка в операторе SQL, невернаячисло указанных параметров и т. д.
Однако на моей машине этот код не выдает sqlite3.ProgrammingError
:
import sqlite3
conn = sqlite3.connect(':memory:')
cursor = conn.cursor()
cursor.execute('CREATE TABLE foo (name TEXT PRIMARY KEY);')
cursor.execute('CREATE TABLE foo (name TEXT PRIMARY KEY);')
Выдает sqlite3.OperationalError: table foo already exists
вместо этого.
Аналогично, этот код не выдает sqlite3.ProgrammingError
на моей машине:
import sqlite3
conn = sqlite3.connect(':memory:')
cursor = conn.cursor()
execute('INSERT INTO foo VALUES ("row1");')
Вместо этого он выдает: sqlite3.OperationalError: no such table: foo
Это не похожев соответствии с документацией OperationalError:
Возникло исключение для ошибок, которые связаны с работой базы данных и не обязательно находятся под контролем программиста, например, происходит непредвиденное разъединение, имя источника данных не найденотранзакция не может быть обработана и т. д. Это подкласс DatabaseError.