【发布时间】:2014-01-09 07:45:33
【问题描述】:
我有一个 django 项目,其中支持多个数据库后端。我想要检查(为了向用户打印合理的错误消息)普通查询集运算符的错误是什么,例如当数据库主机无法访问或未在指定端口运行数据库服务(或凭据无效等)时,我想捕获 cx_Oracle.DatabaseError 和 psycopg2.OperationalError 等。
问题是在我的代码中我不知道使用了哪个支持以及模块是否可用。
我可以这样做:
dberrors = list()
try:
from psycopg2 import OperationalError
dberrors.append(OperationalError)
except ImportError:
pass
try:
from cx_Oracle import DatabaseError:
dberrors.append(DatabaseError)
except ImportError:
pass
# and so on
databaseerrors = tuple(databaseerrors)
try:
mymodels.Model.objects.filter()
except databaseerrors as e:
logger.critical("Database host is not accepting connections")
sys.exit(1)
...但是有没有更惯用或更漂亮的方式?
【问题讨论】:
标签: python exception-handling django-database