可以针对特定错误编写例外吗?像数据库“XXX”不存在

时间:2014-03-09 23:30:08

标签: python psycopg2

我想为the database does not exist编写和例外,所以我可以创建它并返回到顶部(重试连接)。

在编写例外时如何具体说明?

你有两个或更多例外吗?

try:
    db_con = psycopg2.connect(host='HOSTNAME', database='MYDB', user='USERNAME', password='PASSWORD')
    cur = db_con.cursor()
    cur.execute('SELECT version()')
    ver = cur.fetchone()
    print ver

except psycopg2.DatabaseError, e:
    print 'Error %s' % e
    sys.exit(1)

finally:
    if db_con:
        db_con.close()

2 个答案:

答案 0 :(得分:2)

您应该阅读Exceptions上的python文档。

但一般来说是的,你可以通过扩展Exception或任何其他适当的错误类型(在这种情况下我可能会使用IOError)来定义你自己的异常类型,就像任何其他类一样。 p>

示例:

class NoDatabaseError(IOError):
      pass

然后在数据库上面的代码中打开:

 try:
    open_database(database)
 except NoDatabaseError as e:
    print('Could Not Open The Database: '+str(e))
 except Exception as e:
    print('Something Unexpected Went On:'+str(e))

如果那不是您所要求的,那么您应该澄清您的问题。

答案 1 :(得分:1)

创建自己的Exception只是一个继承问题:

class DatabaseDoesNotExist(IOError):
    pass

raise DatabaseDoesNotExist()

您还可以通过列出一个作为另一个的原因来引发嵌套异常:

except psycopg2.DatabaseError as e:
    raise DatabaseDoesNotExist('message', e)     # python 2
    raise DatabaseDoesNotExist('message') from e # python 3

这将在您介入之前保留回溯。