Python 中 try, except 捕获未显式导入模块的错误
当我在脚本中没有直接使用某个模块的类,但这个类却被我已经导入的某个模块使用时,我该如何捕捉到它的错误呢?
举个例子:
from sqlite3 import dbapi2 as sqlite
class sqldb:
def __init__(self):
self.sqlite.connect('records.db')
self.c = self.conn.cursor()
def query(self,query,values)
try:
self.c.execute(query, values)
self.conn.commit()
except sqlite3.OperationalError:
print "SQLite DB locked"
当数据库被锁定时,会出现这样的结果:
NameError: global name 'sqlite3' is not defined
如果我不捕捉这个错误,它会直接给我这个异常信息:'sqlite3.OperationalError'
那么我应该在Except中写什么呢?或者我是不是应该直接导入整个sqlite3模块?如果是这样的话,会不会增加我程序的资源占用呢?
2 个回答
12
在你的程序最上面加上这一行:
import sqlite3
这样可以告诉Python把名字sqlite3
和这个模块联系起来。
另外,你也可以明确地导入你要捕捉的错误:
from sqlite3 import OperationalError
...
try:
self.c.execute(query, values)
self.conn.commit()
except OperationalError:
print "SQLite DB locked"
6
我是不是应该直接导入整个sqlite3模块呢?
是的。
如果是这样的话,这样会不会增加我程序的资源占用呢?
不会——这个模块本来就会被导入。你写的import
语句只是把sqlite3
这个模块的引用添加到你模块的全局命名空间中。