我想澄清python sqlite3模块中异常的意图。特别是,我看到的异常与docs中的意图不符。
例如,文档说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的子类。