【问题标题】:python try, except an error from modules that where not imported explicitlypython尝试,除了来自未明确导入的模块的错误
【发布时间】:2012-03-05 19:49:51
【问题描述】:

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

例如:

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 模块?如果是,这不会增加我的程序的资源占用吗?

【问题讨论】:

    标签: python exception import try-catch


    【解决方案1】:

    还是应该只导入整个 sqlite3 模块?

    是的。

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

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

    【讨论】:

      【解决方案2】:

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

      import sqlite3
      

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

      或者,您可以显式导入您遇到的错误:

      from sqlite3 import OperationalError
      
      ...
      
      try:
          self.c.execute(query, values)
          self.conn.commit()
      except OperationalError:
          print "SQLite DB locked"
      

      【讨论】:

        猜你喜欢
        • 2019-07-01
        • 2021-08-16
        • 2015-04-26
        • 2022-10-06
        • 1970-01-01
        • 2021-01-07
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多