大异常处理程序或大量try ... except子句

时间:2018-12-10 19:18:27

标签: python design-patterns

我有一个关于python代码设计的问题。 我正在某个项目上工作,我可以看到我必须经常处理一定数量的不同类型的错误,这导致在很多地方有try ... execept子句重复出现。

现在的问题是,创建一个异常处理程序(装饰器)并用它装饰所有具有那些重复错误的函数是否会更受欢迎?

这里要权衡的是,如果我创建此异常处理程序装饰器,它将成为一个很大的类/函数,这将使阅读代码的人尝试理解另一段复杂的(也许)逻辑来理解错误的处理方式,如果我不使用装饰器,那么对读者来说很清楚如何处理错误。

另一种选择是为每种错误类型创建多个装饰器。

或者也许就把所有那些try ... except子句保留下来,即使它们被重复了。

对此事有任何意见或其他解决方案吗?谢谢!

1 个答案:

答案 0 :(得分:0)

很多都是主观的,但是我个人认为,为了易于阅读和易于调试,异常处理代码最好靠近发生错误的地方。所以:

  

这里要权衡的是,如果我创建此异常处理程序装饰器,它将成为相当大的类/函数

我建议反对Fixit先生的课程。当发生错误并且调试器将您带入Fixit先生时,您必须退后一步,才能弄清楚错误发生的原因,以及解决该错误的方法。同样,一个不熟悉的开发人员在阅读您的代码时失去了仅理解与特定错误有关的一个小片段的能力,而现在却不得不遍历一个大类。另外一个问题是,Fixit先生中的许多内容与他们正在查看的一个错误无关,而错误处理发生的位置则完全不同。尤其是对于装饰器,我觉得您正在牺牲可读性(特别是对于不熟悉装饰器的人),而却没有获得太多收获。

如果谨慎编写,try / catch块的性能不是很高,并且不会使代码过于混乱。我建议在更多尝试/捕获方面犯下错误,每次尝试/捕获都接近其处理的内容,这样您就可以一目了然地知道任何给定代码段如何处理错误(而不必去查找其他代码)文件)。

如果要重复很多次代码,则可以通过将catch内的代码设置为可以重复调用的方法来重构,也可以通过在try自己的方法内使代码在其体内进行错误处理的方法来进行重构。如有疑问,请保持简单。

而且,我不想成为一名近距离/离题的纳粹分子,所以我不会举报,但我确实认为此问题更适合Programmers @ SE(属于抽象哲学/概念性问题),您可能会得到更好的答复在该网站上。