попробуйте Python, кроме ошибки из модулей, которые не были импортированы явно - PullRequest
2 голосов
/ 14 февраля 2012

Когда класс модуля отсутствует в моем скрипте, но используется одним из модулей (я импортировал явно), как я могу уловить его ошибку?

Например:

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 ]

8 голосов
/ 14 февраля 2012

Поместите следующую строку вверху вашей программы:

import sqlite3

, чтобы сообщить Python, что нужно связать имя sqlite3 с модулем.

Кроме того, вы можете явно импортироватьошибка, которую вы ловите:

from sqlite3 import OperationalError

...

try:
    self.c.execute(query, values)
    self.conn.commit()
except OperationalError:
    print "SQLite DB locked"
2 голосов
/ 14 февраля 2012

Или я должен просто импортировать весь модуль sqlite3?

Да.

Если да, не увеличивает ли это объем ресурсов моей программы??

Нет - модуль все равно импортируется.Все, что вы делаете import, это добавляет ссылку на sqlite3 в глобальное пространство имен вашего модуля.

...