• python错误处理/调试/单元测试/文档测试


    一.错误处理

    1.错误处理

    try:
        ...
    except Exception1:
        ...
    except Exception2:
        ...
    finally:
        ...
    

      

    如果在try中发生错误,那么except将捕获到指定错误,然后执行该段语句;而无论有无错误finally都会执行.

    2.示例代码:

    #-*-coding=utf-8-*-
    a = 0
    try:
      10 / a
    except BaseException:
      print('a  is 0')
    finally:
      print('done')
    

      

    所有异常的异常都继承自BaseExecption,所以可以指定BaseExecption来捕获所有异常

    3.抛出错误

    raise为编程者手动抛出错误
    格式:
    raise 错误类型(错误信息)
    注意,raise语句如果不带参数,就会把当前错误原样抛出或抛出No active exception to reraise

    #-*-coding=utf-8-*-
    a = 0
    try:
      if a == 0:
          raise ValueError('a is 0')
      10 / a
    except Exception as e:
      print(e)
    finally:
      print('done')
    

      

    二.调试

    1.print函数

    2.断言:

    assert a != 0, 'a is 0'


    如果a不等于0,符合预期,否则输出a is 0

    可以使用 -O来关闭assert输出:

    python -O file.py
    

      

    3.日志记录:

    示例:

    import logging
    logging.basicConfig(filename='log.log', level=logging.INFO)
    
    logging.info('发生错误')
    

      

    三.单元测试

    1.引入python的unittest模块

    2.编写测试类,从unittest.TestCase继承

    3.重要的两种方法:

    self.assertEqual(abs(-1), 1) # 断言函数返回的结果与1相等
    

      

    #断言是否会引发指定类型的错误
    with self.assertRaises(KeyError):
        value = d['empty']
    

      

    4.setUp()在每调用一个方法前被执行

    5.tearDown()在每调用一个方法后被执行

    6.运行单元测试

    if __name__ == '__main__':
        unittest.main()
    

      

    另一种方法是在命令行通过参数-m unittest直接运行单元测试,这样可以一次运行多个单元测试

    7.示例代码:

    import unittest
    
    def say_hello():
        return 'hello'
    
    def division(a):
        if a == 0:
            raise ValueError('a不能为0')
        return 100/a
    
    class Test(unittest.TestCase):
        def setUp(self):
            print('测试开始了')
        def test_say_hello(self):
            self.assertEqual(say_hello(), 'hello')
    
        def test_division(self):
            with self.assertRaises(ZeroDivisionError):
                division(0)
        def tearDown(self):
            print('测试结束了')
    
    if __name__ == '__main__':
        unittest.main()
    

      

    四.文档测试

    文档注释中写入交互命令,即可作为文档测试

    class OK:
        """
        this is test ok
    
        Example:
    
        >>> ok = OK()
        >>> ok.my(1,2)
        30
        >>> ok.my(2,-1)
        Traceback (most recent call last):
            ...
        Param is error: -1
        """
        def my(self, a, b):
            return a + b
    
    if __name__ == '__main__':
        import doctest
        doctest.testmod()
    

      

  • 相关阅读:
    UINavigationController
    UIWebView
    控制器view的加载顺序initWithNibName >>> viewDidLoad >>> viewWillAppear >>> viewDidAppear
    UITableView
    JS调用OC方法
    【概念】winform的特点
    【概念】指针
    【c++】类的继承(三种继承方式)、基类和派生类、面向对象三要素
    【笔试】C++笔试题
    【c#】解决DataTable.Rows.Add(dr)语句执行速度慢的问题(GridControl)
  • 原文地址:https://www.cnblogs.com/itfenqing/p/10235774.html
Copyright © 2020-2023  润新知