How to properly use try/except in Python
我有一个函数从mongodb返回db连接处理程序。我还有很多其他函数可以调用DB,我想让我们把连接处理程序扔到一个函数中,这样我就不必在每个函数中定义它了。
这个看起来对吗?我想我的问题是,如果它不能连接到数据库服务器,它会同时打印
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | def mongodb_conn(): try: conn = pymongo.MongoClient() except pymongo.errors.ConnectionFailure, e: print"Could not connect to server: %s" % e return conn def get_hosts() try: conn = mongodb_conn() mongodb = conn.dbname.collection b = [] hosts_obj = mongodb.find({'_id': 'PR'}) for x in hosts_obj: print x except: print"No hosts found" get_hosts() |
将您的
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | def get_hosts() conn = mongodb_conn() if conn is None: # no connection, exit early return try: mongodb = conn.dbname.collection b = [] hosts_obj = mongodb.find({'_id': 'PR'}) for x in hosts_obj: print x except: print"No hosts found" |
无论如何,您应该避免使用一个毯子
仅使用特定的异常;您可以使用一条
1 | except (AttributeError, pymongo.errors.OperationFailure): |
号
也可以使用多个
将异常处理程序限制为代码中可以引发异常的部分。例如,
请注意,如果没有设置,您需要调整您的
1 2 3 4 5 | def mongodb_conn(): try: return pymongo.MongoClient() except pymongo.errors.ConnectionFailure, e: print"Could not connect to server: %s" % e |
现在,如果连接成功,函数将返回连接;如果连接失败,则返回