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

Posted 罗夏

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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()

  

 





以上是关于python错误处理/调试/单元测试/文档测试的主要内容,如果未能解决你的问题,请参考以下文章

Python(10)错误调试测试

Python(10)错误调试测试

Python学习笔记__8章错误调试和测试__8.1章错误处理

Python-调试&单元测试

Python连载22-调试&单元测试

如何快速调试 sCrypt 单元测试错误