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

本文介绍了Python中的错误处理机制,包括try-except-finally结构、手动抛出异常的方法,以及调试技巧如使用print、assert和日志记录。此外,还详细讲解了如何利用unittest模块进行单元测试,并展示了文档测试的基本用法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.错误处理

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()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值