美文网首页
异常处理的几点基本原则

异常处理的几点基本原则

作者: 叶田的学习笔记 | 来源:发表于2018-11-04 20:34 被阅读0次

    1、注意异常的粒度,不推荐在try中放入过多的代码。

    在try中放入过多的代码带来的问题是如果程序抛出异常,将会较难定位,给debug和修复带来不便,因此应尽量只在可能抛出异常的语句块前面放入try语句。

    2、谨慎使用单独的except语句处理异常,最好能定位具体的异常。同样也不推荐使用except Exception来捕获异常。

    import sys
    
    try:
        print(a)
        b = 0
        print(a/b)
    except ZeroDivisionError:
        sys.exit('ZeroDivisionError: Can not division zero')
    

    上面的代码中,如果删掉except后面的ZeroDivisionError,则程序运行后只会打印“ZeroDivisionError: Can not division zero”,而实际情况是a在使用前没有定义,程序引发了NameError。

    单独使用except语句会捕获SystemExit,KeyboardInterrupt等在内的各种异常,从而掩盖程序真正发生异常的异常,给debug造成一定的迷惑性。因此需要谨慎使用,最好能在except语句中定位具体的异常。如果在某些情况下不得不使用单独的except语句,最好能够使用raise语句将异常抛出向上层传递。

    3、可能包含多个except语句,分别来处理不同的特定的异常。但最多只有一个分支会被执行。所以except语句有排序先后问题。

    为了更精确地定位错误发生的原因,推荐的方法是将继承结构中子类异常在前面的except语句中抛出,而父类异常在后面的except语句抛出。
    这样做的原因是当try块中有异常发生的时候,解释器根据except声明的顺序进行匹配,在第一个匹配的地方便立即处理该异常。如果将层次高的异常类再前面进行捕获,往往不能精确地定位异常发生的具体位置。
    如果异常能够在被捕获的位置被处理,那么应该及时处理,不能处理也应该以合适的方式向上层抛出。遇到异常不论好歹就向上层抛出是非常不明智的。向上层传递的时候需要警惕异常被丢失的情况,可以使用不带参数的raise来传递。

    4、使用更为友好的异常信息。软件最终是为用户服务,当异常发生的时候,异常信息清晰友好与否直接关系到用户体验。

    相关文章

      网友评论

          本文标题:异常处理的几点基本原则

          本文链接:https://www.haomeiwen.com/subject/kgldxqtx.html