专栏首页未闻Code一日一技:使用doctest测试Python代码的注释

一日一技:使用doctest测试Python代码的注释

如果大家看过一些有名的Python开源项目,你可能会看到他们在文档型注释里面,出现了下面这样的使用示例:

"""
Requests HTTP Library
~~~~~~~~~~~~~~~~~~~~~
Requests is an HTTP library, written in Python, for human beings.
Basic GET usage:
   >>> import requests
   >>> r = requests.get('https://www.python.org')
   >>> r.status_code
   200
   >>> b'Python is a programming language' in r.content
   True

...
"""

这段代码来自 requestshttps://github.com/psf/requests/blob/master/requests/__init__.py

可能有同学会觉得,这只是普通的注释,帮助读代码的人知道这段代码是怎么用的。

但实际上,Python自带的 doctest模块,可以识别这种注释,并根据这里的用法来测试对应的函数或者类。

例如,我们创建一个 test_doc.py文件,其内容如下:

def test(n):
    """
    用于判断传入参数n的奇偶性
    >>> test(1)
    1是奇数
    >>> test(2)
    2是偶数
    """
    if n % 2 == 0:
        print(f'{n}是偶数')
    else:
        print(f'{n}是奇数')

如下图所示

现在我们运行如下代码:

python3 -m doctest test_doc.py

发现没有任何输出,如下图所示:

现在,我们把这个注释 改错,让注释与实际情况不符合,如下图所示:

保存代码,再次运行命令,发现报错了,如下图所示:

返回的报错信息里面:

Failed example:
    test(1)
Expected:
    1是偶数
Got:
    1是奇数

Expected表示期望的输出结果, Got表示实际的输出结果。

通过使用doctest,可以有效帮你完善函数或者类的文档,并且当你每次修改了函数或类的时候,都用doctest来检查一下,如果输入输出发生了改变,doctest就会发现并告诉你。

doctest的详细使用,可以阅读Python的官方文档:https://docs.python.org/3/library/doctest.html

本文分享自微信公众号 - 未闻Code(itskingname),作者:kingname

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-08-22

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 一日一技:一行代码把包含二元组的列表拆成两个列表

    我们知道,当我们有两个长度一样的列表的时候,可以使用 zip快速把它组合起来。例如:

    青南
  • 一日一技:如何把数字精确到小数点前几位?

    在Python中显示浮点数的时候,我们可能会需要把数字精确到小数点后若干位,例如: 87654.32101,精确到小数点后两位为 87654.32。用Pytho...

    青南
  • 使用Docker Swarm搭建分布式爬虫集群

    在爬虫开发过程中,你肯定遇到过需要把爬虫部署在多个服务器上面的情况。此时你是怎么操作的呢?逐一SSH登录每个服务器,使用git拉下代码,然后运行?代码修改了,于...

    青南
  • 你敢信?四行Python代码就能知道你那的天气!

    今天给大家带来的Python实战项目是四行Python代码获取所在城市的天气预报,我们隐隐听到唏嘘声,不信四行Python代码可以获取是吗?那我们一起来看看:

    小小科
  • Fortran for Scientists & Engineers - 4th edition

    本书为第四版,直接基于Fortran 95/2003(适用科学家和工程师) 的第三版而编写,保留了上一版的编写结构,但全书都穿插Fortran 2008的新知识...

    fem178
  • Anaconda-环境和包的管理

    如果conda中没有需要安装的包。需要再Anaconda.org中查找。 现在Anaconda.org网站中查找到指定的包,执行显示的下载名命令:

    悠扬前奏
  • 坐自动驾驶汽车,是怎样的一种体验?

    我上课的时候,没少给学生播放 Tesla 那段脍炙人口的自动驾驶视频。学生们都觉得很惊艳。

    王树义
  • 增长黑客7:变现

    公司商业模式不同,提高用户终身价值的方法也不一样,零售公司:说服他们购买更多产品;SaaS公司:续订、延长订购年限、升级到更贵的服务。

    霖酱
  • iOS持续集成(CI)——OCLint静态代码分析

    通过 -e 选项来忽略Cocoapods 来pod文件,通过--来分割 oclint-json-compilation-database 的参数与 oclint...

    羊羽shine
  • Intel Fortran 编译器

    Fortran语言的编译器种类繁多,有Intel Fortran、GFortran、Simply Fortran、PGI Fortran、NAG Fortran...

    fem178

扫码关注云+社区

领取腾讯云代金券