Python(七)


异常处理

  1. try...except...finally...机制

    try:
        print('try...')
        r = 10 / 0
        print('result:', r)
    except ZeroDivisionError as e:
        print('except:', e)
    finally:
        print('finally...')
    print('END')
    # try...
    # except: division by zero
    # finally...
    # END

    当我们认为某些代码可能会出错时,就可以用try来运行这段代码,如果执行出错,则后续代码不会继续执行,而是直接跳转至错误处理代码,即except语句块,执行完except后,如果有finally语句块,则执行finally语句块,至此,执行完毕。

  2. finally如果有,则一定会被执行(可以没有finally语句)。

  3. Python的错误其实也是class,所有的错误类型都继承自BaseException,所以在使用except时需要注意的是,它不但捕获该类型的错误,还把其子类也“一网打尽”。

  4. 使用try...except捕获错误还有一个巨大的好处,就是可以跨越多层调用,比如函数main()调用bar()bar()调用foo(),结果foo()出错了,这时,只要main()捕获到了,就可以处理:

    def foo(s):
        return 10 / int(s)
    
    def bar(s):
        return foo(s) * 2
    
    def main():
        try:
            bar('0')
        except Exception as e:
            print('Error:', e)
        finally:
            print('finally...')
    main()
    # Error: division by zero
    # finally...
  5. Python内置的logging模块可以非常容易地记录错误信息,通过配置,logging还可以把错误记录到日志文件里,方便事后排查。

  6. raise语句抛出错误。

单元测试

  1. 单元测试可以有效地测试某个程序模块的行为,是未来重构代码的信心保证。
  2. 单元测试的测试用例要覆盖常用的输入组合、边界条件和异常。
  3. 单元测试代码要非常简单,如果测试代码太复杂,那么测试代码本身就可能有bug。
  4. 单元测试通过了并不意味着程序就没有bug了,但是不通过程序肯定有bug。

文章作者: nusqx
文章链接: https://nusqx.top
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 nusqx !
评论
  目录