我想为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()
答案 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
这将在您介入之前保留回溯。