例外和sqlite3

LNA*_*LNA 1 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()
Run Code Online (Sandbox Code Playgroud)

我想弄清楚上面是否是有效的代码.也就是说,在我的"try"子句之后,我可以有多个例外吗?

当我通过输入'python filename.py'来运行它时,我看到了"哎呀!这是一个操作错误.再试一次......"打印在我的终端中.

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

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

另外,当我注释掉"除了sqllite3.OperationalError"子句时,我的终端出现了这个错误:

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

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

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

fal*_*tru 5

NameError,ValueError,IOError内置例外.不要限制他们sqlite3.:

...
except NameError:
    print "Name Error"
except ValueError:
    print "value error"
except IOError:
    print "IO error"
Run Code Online (Sandbox Code Playgroud)

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

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

或参考模块文档