python - 异常和 sqlite3

标签 python sql sqlite flask

import sqlite3
conn = sqlite3.connect("database.db")
cursor = conn.cursor()
try:
    cursor.execute("INSERT INTO loctions VALUES('Hogwarts', 'Scotland'")
    cursor.execute("INSERT INTO characters VALUES('Albus', 'Dumbledore')")
    conn.commit()

except sqlite3.OperationalError:
    print "Oops! This was an operational error. Try again..."

except sqlite3.NameError:
    print "Name Error"

except sqlite3.ValueError:
    print "value error"

except sqlite3.IOError:
    print "IO error"

conn.close()

我想弄清楚上面的代码是否有效。也就是说,我可以在“try”子句之后有多个异常吗?

当我通过输入“python filename.py”运行它时,我看到“糟糕!这是一个操作错误。再试一次......”打印在我的终端上。

这是有道理的,因为我拼错了第一个表的名称(位置而不是位置),所以这是一个操作错误。

但我对如何强制出现名称错误或值错误感到困惑。

此外,当我注释掉“except sqllite3.OperationalError”子句时,我的终端出现了这个错误:

Traceback (most recent call last):
  File "sqle.py", line 14, in <module>
    except sqlite3.NameError:
AttributeError: 'module' object has no attribute 'NameError'

这是说没有 sqlite3.NameError 这样的东西吗?然而 sqlite3.OperationalError 是一回事。

我如何发现有哪些类型的错误?

最佳答案

NameError , ValueError , IOErrorbuiltin exceptions .不要用 sqlite3 限定它们。:

...
except NameError:
    print "Name Error"
except ValueError:
    print "value error"
except IOError:
    print "IO error"

查看模块中定义了哪些异常(使用异常是 Exception 类的子类的属性):

>>> import inspect
>>> [name for name, value in vars(sqlite3).items()
     if inspect.isclass(value) and issubclass(value, Exception)]
['Warning', 'InternalError', 'ProgrammingError', ..., 'OperationalError']

或咨询the module documentation

关于python - 异常和 sqlite3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25835473/

相关文章:

python - 使用 for 循环时如何查找 CSV 文件中的行中是否存在列表中的任何元素

python - 与外部相比,在列表理解内设置集合时存在巨大的时间差异

java - 我应该使用什么类型的数据结构来保存表行?

sql - ORA-00054 删除表时资源繁忙

java - 将表连接到 jtextbox

python - 将 SQLAlchemy 事件监听器放置在多对多表上

python - 子类化时不可散列的类型 `int`

sql server 2008 如何断开每个人与我的数据库的连接?

php - PHP 的 SQLite3Stmt 类会导致锁定问题吗?

python - 如何以编程方式确定列是否在 SQLite 中设置为 AUTOINCREMENT?