博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python错误处理/调试/单元测试/文档测试
阅读量:6463 次
发布时间:2019-06-23

本文共 1979 字,大约阅读时间需要 6 分钟。

一.错误处理

1.错误处理

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

  

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

2.示例代码:

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

  

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

3.抛出错误

raise为编程者手动抛出错误

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

#-*-coding=utf-8-*-a = 0try:  if a == 0:      raise ValueError('a is 0')  10 / aexcept 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 logginglogging.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 unittestdef say_hello():    return 'hello'def division(a):    if a == 0:        raise ValueError('a不能为0')    return 100/aclass 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 + bif __name__ == '__main__':    import doctest    doctest.testmod()

  

 

转载于:https://www.cnblogs.com/itfenqing/p/10235774.html

你可能感兴趣的文章
svn status 显示 ~xx
查看>>
常用HiveQL总结
查看>>
[转]使用Visual Studio Code开发Asp.Net Core WebApi学习笔记(三)-- Logger
查看>>
POJ 3311 Hie with the Pie(状压DP + Floyd)
查看>>
HDU 1402 A * B Problem Plus FFT
查看>>
[CareerCup] 17.3 Factorial Trailing Zeros 求阶乘末尾零的个数
查看>>
Security updates and resources
查看>>
深入理解JavaScript系列(25):设计模式之单例模式
查看>>
DNS为什么通常都会设置为14.114.114.114
查看>>
给定一个序列,判断该序列是否为二叉树查找树的后序遍历序列
查看>>
Sqoop架构(四)
查看>>
golang copy函数
查看>>
《你有多少问题要请示》精华集粹
查看>>
深度 | 机器学习敲门砖:任何人都能看懂的TensorFlow介绍【转】
查看>>
leveldb学习:DBimpl
查看>>
MySQL存储引擎--MYSIAM和INNODB引擎区别
查看>>
[Recompose] Stream Props to React Children with RxJS
查看>>
打印图片
查看>>
apache 配置
查看>>
SHOW CREATE DATABASE Syntax
查看>>