在这种情况下如何防止“过于广泛的例外”?

布鲁斯基

我列出了可能会失败的功能,如果失败,我不希望脚本停止运行,而是继续下一个功能。

我正在执行这样的事情:

list_of_functions = [f_a, f_b, f_c]
for current_function in list_of_functions:
    try:
        current_function()
    except Exception:
        print(traceback.format_exc())

它工作正常,但不符合PEP8:

捕获异常时,请尽可能提及特定的异常,而不要使用裸露的except:子句。

例如,使用:

try:
    import platform_specific_module
except ImportError:
    platform_specific_module = None

仅有的except:子句将捕获SystemExit和KeyboardInterrupt异常,这使得使用Control-C中断程序更加困难,并且可以掩盖其他问题。如果要捕获所有表明程序错误的异常,请使用Exception:除外(裸除等效于BaseException:除外)。

一个好的经验法则是将裸'except'子句的使用限制为两种情况:

如果异常处理程序将打印输出或记录回溯;至少用户会意识到发生了错误。

如果代码需要做一些清理工作,但是让异常通过raise向上传播。试试...最终可能是处理这种情况的更好方法。

我怎样才能做到这一点呢?

埃德·史密斯

您引用的PEP8指南建议,在记录错误的情况下,可以在情况中使用裸露异常。我认为您应该涵盖尽可能多的例外/知道如何处理,然后记录其余例外pass,例如

import logging

list_of_functions = [f_a,f_b,f_c]
for current_function in list_of_functions:
    try:
        current_function()
    except KnownException:
        raise
    except Exception as e:
        logging.exception(e)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类常见问题

在这种情况下,如何防止ArrayIndexOutOfBoundsException?

来自分类Dev

在这种情况下如何防止空引用异常

来自分类Dev

Swift:如何在这种情况下防止索引超出范围

来自分类Dev

在这种情况下如何定义适用性?

来自分类Dev

在这种情况下如何动态形成插入查询

来自分类Dev

在这种情况下如何更新多个列

来自分类Dev

在这种MongoDB连接情况下,如何注入bean?

来自分类Dev

在这种情况下,如何设置我的Class参数?

来自分类Dev

在这种情况下,jquery .after应该如何工作?

来自分类Dev

在这种情况下如何使用unique_ptr?

来自分类Dev

在这种情况下如何计算数组的长度

来自分类Dev

在这种情况下,如何正确使用ndb KeyProperty?

来自分类Dev

在这种情况下,如何应用惰性量词?

来自分类Dev

在这种情况下,如何避免使用instanceof?

来自分类Dev

在这种情况下如何调用ICommand.CanExecute?

来自分类Dev

在这种情况下,String.Format如何工作?

来自分类Dev

在这种情况下如何使NSMutableArray持久化?

来自分类Dev

在这种情况下如何处置资源

来自分类Dev

在这种情况下如何使用struct

来自分类Dev

在这种情况下如何释放内存?

来自分类Dev

地图在这种情况下如何工作?

来自分类Dev

在这种情况下如何使用功能?

来自分类Dev

如何在这种情况下编写equals()方法?

来自分类Dev

在这种情况下如何理解array.foo?

来自分类Dev

在这种情况下,如何缩短if语句?

来自分类Dev

在这种情况下如何正确使用struct

来自分类Dev

在这种情况下,Ruby的map方法如何工作?

来自分类Dev

在这种情况下,如何链接库函数?

来自分类Dev

在这种情况下如何解决NoMethodError?

Related 相关文章

热门标签

归档