Python 中 try, except 捕获未显式导入模块的错误

6 投票
2 回答
16777 浏览
提问于 2025-04-17 13:00

当我在脚本中没有直接使用某个模块的类,但这个类却被我已经导入的某个模块使用时,我该如何捕捉到它的错误呢?

举个例子:

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这个模块的引用添加到你模块的全局命名空间中。

撰写回答