如何在引入错误处理时保持代码布局在视觉上"有吸引力"?

Rab*_*ski 5 error-handling layout

在编写代码时,我觉得很重要的是,我的代码看起来很好(除了一个事实,即它有工作很好).Code Complete(p729)一书中对此进行了详细描述:" 格式良好的代码的视觉和智能享受是很少有非程序员能够欣赏的乐趣 ".

问题是,只要我的代码功能正常工作,并且我开始引入错误处理(try-except子句等)以使其健壮,我发现这通常会弄乱我精心设计的代码并将其转换进入一些绝对不具备视觉美感的东西.try-except语句和其他if语句使代码的可读性和结构性降低.

我想知道这是因为我滥用或过度使用错误处理,还是这是不可避免的?任何提示或技巧,以保持良好的外观?

Doc*_*own 5

很难给出一个通用的答案,因为有很多不同的错误处理案例,所以有很多不同的方法来处理这个问题.如果你要发布一些真实的例子,你可能会在这里得到很多关于如何改进你的代码的建议.

通常,向现有函数添加错误处理会使它们变大,因此将它们重构为更小的方法总是一个好主意.如果您正在寻找更通用的方法,那么您应该熟悉面向方面的编程.这是一种完全脱离业务逻辑代码的方法,可以防止所谓的交叉问题(如错误处理)的代码.

编辑:只是一个简单的技巧:

我避免写这样的错误检查:

 int MyFunction()
 {
    if( ErrorCheck1Passes())
    {
       if( ErrorCheck2Passes())
       {
           if( ErrorCheck3Passes())
           {
                callSomeFunction(...);
           }
           else
              return failureCode3;
        }
        else
           return failureCode2;
    }
    else
       return failureCode1;

    return 0;
 }
Run Code Online (Sandbox Code Playgroud)

我更喜欢

int MyFunction()
{
   if( !ErrorCheck1Passes())
       return failureCode1;
   if( !ErrorCheck2Passes())
       return failureCode2;
   if( !ErrorCheck3Passes())
       return failureCode3;

   callSomeFunction(...);
   return 0;
}
Run Code Online (Sandbox Code Playgroud)


Ger*_*der 0

这完全取决于您如何进行编程。如果您只进行正确的输入验证,您可以避免很多这些try-catch(或者正如您所说的)语句。try-except当然,要涵盖大多数用户倾向于放入表单等中的垃圾内容需要做很多工作,但它将使您的数据处理例程保持干净(或更干净)。