python尝试,除了未明确导入的模块的错误

Seb*_*ian 2 python import exception try-catch

当模块类不在我的脚本中但被其中一个模块使用时(我明确导入了)我如何捕获他的错误?

例如:

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"
Run Code Online (Sandbox Code Playgroud)

将导致(当数据库被锁定时):

NameError: global name 'sqlite3' is not defined
Run Code Online (Sandbox Code Playgroud)

但是当我没有发现错误时,它确实给出了我的异常:'sqlite3.OperationalError'

那么我应该把它作为除外?或者我应该导入整个sqlite3模块?如果是,这不会增加我的程序的资源占用空间吗?

sve*_*rre 8

将以下行放在程序的顶部:

import sqlite3
Run Code Online (Sandbox Code Playgroud)

告诉Python将名称sqlite3与模块相关联.

或者,您可以显式导入要捕获的错误:

from sqlite3 import OperationalError

...

try:
    self.c.execute(query, values)
    self.conn.commit()
except OperationalError:
    print "SQLite DB locked"
Run Code Online (Sandbox Code Playgroud)


Sve*_*ach 5

或者我应该只导入整个 sqlite3 模块?

是的。

如果是,这不会增加我程序的资源占用吗?

否 - 无论如何都会导入模块。您的import语句所做的就是添加sqlite3对模块全局命名空间的引用。