热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

如何在Python中正确使用try/except

如何解决《如何在Python中正确使用try/except》经验,为你挑选了1个好方法。

我有一个从MongoDB返回数据库连接处理程序的函数.我有各种其他函数调用DB,我想让连接处理程序抛出一个函数,所以我不必在每个函数中定义它.

这看起来不错吗?我想我的问题是,如果它无法与数据库服务器建立连接,它将打印两条消息Could not connect to server,No hosts found我怎样才能打印"无法连接到服务器".

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()

Martijn Piet.. 11

将您的cOnn= mongodb_conn()通话了的try .. except处理程序,测试,如果None返回:

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"

你应该不惜一切代价避免使用毯子except; 你现在正在捕捉所有内容,包括内存错误和键盘中断,请参阅为什么"除了:传递"一个糟糕的编程习惯?

使用特定的例外; 您可以使用一个except语句来捕获多个异常类型:

except (AttributeError, pymongo.errors.OperationFailure):

或者您可以使用多个except语句以不同的方式处理不同的异常.

将异常处理程序限制为可以抛出异常的代码部分.for x in hosts_obj:例如,循环可能不会抛出AttributeError异常,因此它可能不应该是try块的一部分.

请注意,如果从未设置过,您需要调整mongodb_conn()函数以不尝试使用conn本地函数; UnboundLocal如果你这样做,你会收到错误:

def mongodb_conn():
    try:
        return pymongo.MongoClient()
    except pymongo.errors.ConnectionFailure, e:
        print "Could not connect to server: %s" % e

None如果连接失败,该函数如果成功则返回连接.



1> Martijn Piet..:

将您的cOnn= mongodb_conn()通话了的try .. except处理程序,测试,如果None返回:

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"

你应该不惜一切代价避免使用毯子except; 你现在正在捕捉所有内容,包括内存错误和键盘中断,请参阅为什么"除了:传递"一个糟糕的编程习惯?

使用特定的例外; 您可以使用一个except语句来捕获多个异常类型:

except (AttributeError, pymongo.errors.OperationFailure):

或者您可以使用多个except语句以不同的方式处理不同的异常.

将异常处理程序限制为可以抛出异常的代码部分.for x in hosts_obj:例如,循环可能不会抛出AttributeError异常,因此它可能不应该是try块的一部分.

请注意,如果从未设置过,您需要调整mongodb_conn()函数以不尝试使用conn本地函数; UnboundLocal如果你这样做,你会收到错误:

def mongodb_conn():
    try:
        return pymongo.MongoClient()
    except pymongo.errors.ConnectionFailure, e:
        print "Could not connect to server: %s" % e

None如果连接失败,该函数如果成功则返回连接.


推荐阅读
author-avatar
手机用户2502875603
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有