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()
我试图弄清楚以上是否是有效的代码。也就是说,在我"尝试"之后,我可以有多个例外吗?条款?
当我通过键入' python filename.py'来运行时,我看到了#34;哎呀!这是一个操作错误。再试一次......"打印在我的终端。
这是有道理的,因为我拼错了第一个表的名称(位置而不是位置),所以这是一个操作错误。
但我对如何强制命名错误或值错误感到困惑。
另外,当我注释掉"除了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是一个东西。
如何发现有哪些类型的错误?
答案 0 :(得分:5)
NameError
,ValueError
,IOError
为builtin 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']