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中错误、调试、单元测试、文档测试
错误分为程序的错误和由用户错误的输入引起的错误,此外还有因为各种各样意外的情况导致的错误,比如在磁盘满的时候写入.从网络爬取东西的时候,网络断了.这类错误称为异常 错误处理 普通的错误处理机制就是在出 ...
- python 错误、调试、单元测试、文档测试
错误分为程序的错误和由用户错误的输入引起的错误,此外还有因为各种各样意外的情况导致的错误,比如在磁盘满的时候写入.从网络爬取东西的时候,网络断了.这类错误称为异常 错误处理 参考链接:https:// ...
- python错误、调试、测试
1.错误, Python内置的try...except...finally用来处理错误十分方便.出错时,会分析错误信息并定位错误发生的代码位置才是最关键的. 程序也可以主动抛出错误,让调用者来处理相应 ...
- Python -- 文档测试
Python内置的“文档测试”(doctest)模块可以直接提取注释中的代码并执行测试. 例子: # mydict2.py class Dict(dict): ''' Simple dict but ...
- ORA-01578和ORA-26040--NOLOGGING操作引起的坏块-错误解释和解决方案(文档ID 1623284.1)
ORA-01578和ORA-26040--NOLOGGING操作引起的坏块-错误解释和解决方案(文档ID 1623284.1) (一)NOLOGGING操作引起的坏块(ORA-01578和ORA-26 ...
- Python处理PDF和Word文档常用的方法
Python处理PDF和Word文档的模块是PyPDF2,使用之前需要先导入. 打开一个PDF文档的操作顺序是:用open()函数打开文件并用一个变量来接收,然后把变量给传递给PdfFileReade ...
- 分享一下自己写的Python 3的各种PDF文档【花了半年时间那】
这些文档花了我半年的时间去整理.因为是第一次进行整理,希望帮助后来者少走弯路.毕竟是第一次整理.哪些地方不到位,希望大家和我练习,我们一起把它做好,以下就直接给出下载地址了,都是免积分的下载奥.因此. ...
- linux centos7 安装虚拟Python环境,pyenv安装文档
python多版本控制pyenv安装文档 1.在线安装: curl -L https://github.com/pyenv/pyenv-installer/raw/master/bin/pyenv-i ...
- 使用Python爬虫库BeautifulSoup遍历文档树并对标签进行操作详解(新手必学)
为大家介绍下Python爬虫库BeautifulSoup遍历文档树并对标签进行操作的详细方法与函数下面就是使用Python爬虫库BeautifulSoup对文档树进行遍历并对标签进行操作的实例,都是最 ...
随机推荐
- 洛谷 P2680 运输计划-二分+树上差分(边权覆盖)
P2680 运输计划 题目背景 公元 20442044 年,人类进入了宇宙纪元. 题目描述 公元20442044 年,人类进入了宇宙纪元. L 国有 nn 个星球,还有 n-1n−1 条双向航道,每条 ...
- HashMap底层数据结构和算法解析
1.Hash Map的数据结构? A:哈希表结构(链表散列:数组+链表)实现,结合数组和链表的优点.当链表长度超过8时,链表转换为红黑树. transient Node<K,V>[] ta ...
- 【CodeVS 2845】排序的代价
http://codevs.cn/problem/2845/ 好难的题啊qwq 没想到把排好序的数组的第i位和原数组的第i位的值看成一个单射函数,这样这是一个长度为n的置换. 对于置换的其中一个循环, ...
- BZOJ 2157 旅游(树链剖分+线段树)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=2157 [题目大意] 支持修改边,链上查询最大值最小值总和,以及链上求相反数 [题解] ...
- BZOJ 4403 序列统计(Lucas)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=4403 [题目大意] 给定三个正整数N.L和R,统计长度在1到N之间, 元素大小都在L到 ...
- 对学生排序 Exercise07_17
import java.util.Scanner; /** * @author 冰樱梦 * 时间:2018年下半年 * 题目:对学生排序 * */ public class Exercise07_17 ...
- 8VC Venture Cup 2016 - Elimination Round D. Jerry's Protest 暴力
D. Jerry's Protest 题目连接: http://www.codeforces.com/contest/626/problem/D Description Andrew and Jerr ...
- 找回VisualStudio异常设置中丢失的“用户未处理的(User-unhandled)”列
今天发现我的VisualStudio中的异常设置中"用户未处理的"列丢失了 虽然我很少设置这一项,但没了还是觉得怪怪的,网上搜了一下,在文章"USER-UNHANDLED ...
- 高并发环境下,Redisson实现redis分布式锁
原文:http://tlzl0526-gmail-com.iteye.com/blog/2378853 在一些高并发的场景中,比如秒杀,抢票,抢购这些场景,都存在对核心资源,商品库存的争夺,控制不好, ...
- node.js+mysql把数据显示到前端简单实例
原以为数据查出来了,要展示是鸡毛蒜皮的事儿!谁知道,我弄了一天....我错就错在没把connection.query里面. 下面的例子是可以的了! 看过我之前文章的同学,应该很熟悉下面的代码,对!主要 ...