我列出了可能会失败的功能,如果失败,我不希望脚本停止运行,而是继续下一个功能。
我正在执行这样的事情:
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] 删除。
我来说两句