我得到了一个可能失败的函数列表,如果一个失败,我不希望脚本停止,而是继续下一个函数.
我用这样的东西执行它:
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())
Run Code Online (Sandbox Code Playgroud)
它工作正常,但它不符合PEP8:
捕获异常时,请尽可能提及特定异常,而不是使用bare except子句.
例如,使用:
Run Code Online (Sandbox Code Playgroud)try: import platform_specific_module except ImportError: platform_specific_module = None一个裸的except:子句将捕获SystemExit和KeyboardInterrupt异常,使得用Control-C中断程序变得更加困难,并且可以掩盖其他问题.如果要捕获发出程序错误信号的所有异常,请使用除Exception之外的内容:(裸除了除了BaseException之外).
一个好的经验法则是将裸"除"子句的使用限制为两种情况:
如果异常处理程序将打印出来或记录回溯; 至少用户会意识到发生了错误.
如果代码需要做一些清理工作,但随后让异常向上传播并加注.尝试...终于可以更好地处理这种情况.
这个好方法怎么样?