python logging模块
Python引入了logging模块来记录用户想要查看的信息。
日志级别
当我们执行如下代码:
1
2
3
4
5
6
7 import logging # 引入logging模块
# 将信息打印到控制台上
logging.debug(u"A")
logging.info(u"B")
logging.warning(u"C")
logging.error(u"D")
logging.critical(u"E")
控制台的输出结果为:
1
2
3 WARNING:root:C
ERROR:root:D
CRITICAL:root:E
我们会发现控制台只输出了后三个日志,这是因为默认生成的root logger的level是logging.WARNING,低于该级别的就不输出了。因此在代码最上方需要改变日志级别为NOTSET:
1
2
3 import logging # 引入logging模块
logging.basciConfig(level=logging.NOTSET) # 设置日志级别
logging.debug(u"如果设置了日志级别为NOTSET,那么这里可以采取debug、info的级别的内容也可以显示在控制台上了")控制台日志输出
1
2
3
4
5
6
7
8 import logging # 引入logging模块
logging.basicConfig(level=logging.DEBUG,format='%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s') # logging.basicConfig函数对日志的输出格式及方式做相关配置
# 由于日志基本配置中级别设置为DEBUG,所以一下打印信息将会全部显示在控制台上
logging.info('this is a loggging info message')
logging.debug('this is a loggging debug message')
logging.warning('this is loggging a warning message')
logging.error('this is an loggging error message')
logging.critical('this is a loggging critical message')
日志文件输出
1 | import logging # 引入logging模块 |
python单元测试框架-unittest
unittest最核心的原理
- TestCase:测试用例
- setUP:测试前准备环境的搭建
- run:执行测试代码
- tearDown:测试后环境的还原
- TestSuite:多个测试用例的集合
- TestLoader:加载TestCase到TestSuite中
- TextTestRunner:执行测试用例,并且把结果保存在TextTestResult之中
- test fixture:对测试用例环境的搭建和销毁
基本使用方法
1 | import unnittest |
- 在第一行给出了每一个用例执行的结果的标识,成功是 .,失败是 F,出错是 E,跳过是 S。从上面也可以看出,测试的执行跟方法的顺序没有关系,test_divide写在了第4个,但是却是第2个执行的。
- 每个测试方法均以 test 开头,否则是不被unittest识别的。
进阶:TestSuite(组织测试)
将程序按照添加的顺序来执行。此处只需针对上文的main函数进行改进
1 | if __name__ == '__main__': |
进阶:准备测试环境
1 | class TestMathFunc(unittest.TestCase): |
- 这两个方法在每个测试方法执行前以及执行后执行一次,
setUp
用来为测试准备环境,tearDown
用来清理环境,已备之后的测试。 - 如果想要在所有case执行之前准备一次环境,并在所有case执行结束之后再清理环境,我们可以用
setUpClass()
与tearDownClass()
os模块与sys的模块
os模块与sys模块的区分
os模块:提供了一种方便使用操作系统函数的方法
sys模块:提供访问由解释器使用或维护的变量和在与解释器交互使用到的函数
os模块常用方法
1 | os.remove()删除文件 |
sys模块常用方法:
1 | sys.argv 命令行参数List,第一个元素是程序本身路径 |
关于时间的模块
datetime模块获取当前时间
1 | import datetime |
retry模块
使用场景通常是在网络情况不太稳定时,预防超时异常1
2
3
4
5
6
7
8
9
10
11import random
from retrying import retry
def do_something_unreliable():
if random.randint(0, 10) > 1:
raise IOError("Broken sauce, everything is hosed!!!111one")
else:
return "Awesome sauce!"
print do_something_unreliable()
以上是官方文档的代码:给函数添加@retry装饰器后,只要有异常,那么函数会不断地重试,直到有返回值。
下面是几个常常传入装饰器的参数1
2
3
4# 最多尝试7次,这个最常用!
# 最长等待10秒
timeit
专门用来测试代码的运行时间,运行十分方便:
实例化Timer
类需要两个参数,第一个参数为你需要计算运行时间的函数,类型为字符串;第二个参数为构建环境的导入语句,类型也为字符串。
例子1
1 | # 用来计算运行时间的函数 |
glob
glob是python自己带的一个文件操作相关模块,用它可以查找符合自己目的的文件,支持通配符操作:
?
[]]
这三个通配符,代表0个或多个字符,
?
代表一个字符,[]
匹配指定范围内的字符,如[0-9]匹配数字。主要方法如下.
glob方法:返回所有匹配的文件路径列表
1 | glob.glob(r'C:*.txt') # 获取C盘下的所有txt文件 |
PIL
PIL:Python Imaging Library,已经是Python平台事实上的图像处理标准库了。PIL功能非常强大,但API却非常简单易用。
诡异的安装方式
pip install pillow
基本操作
1 | from PIL import Image |
matplotlib
在远端服务器利用matplotlib绘图
在import matplotlib.pyplot
之前加上:1
2import matplotlib as mpl
mpl.use('Agg')
在plt.draw
之后加上:1
plt.savefig("/path/to/pic.jpg")
setuptool
basic usage
1 | from setuptools import setup |
pydot & graphviz
两个包为keras的可视化模块。可以可视化神经网络结构
easydict
引用与参考资料
- logging:https://www.cnblogs.com/CJOKER/p/8295272.html
- unittest:https://blog.csdn.net/huilan_same/article/details/52944782#t4
- https://my.oschina.net/liuyuantao/blog/755907
- https://blog.csdn.net/u010472607/article/details/76857493/
- https://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/00140767171357714f87a053a824ffd811d98a83b58ec13000
- https://blog.csdn.net/i_is_a_energy_man/article/details/77833040
- https://blog.csdn.net/zzytmxk/article/details/53402257
- http://python.jobbole.com/87240/