新闻中心

python中doctest如何嵌入源码?

2025-12-02
浏览次数:
返回列表
doctest通过在文档字符串中嵌入交互式示例来测试代码,使用>>>表示输入和期望输出,运行方式包括在模块中调用doctest.testmod()或命令行执行python -m doctest,支持多行输出、异常处理及模糊匹配,适用于函数、类和模块的docstring,确保文档与代码一致性。

python中doctest如何嵌入源码?

在Python中,doctest通过将测试用例写在函数、类或模块的文档字符串(docstring)中来嵌入源码。这些测试看起来就像在交互式Python解释器中的输入输出,doctest会自动提取并运行它们。

基本格式:
在三引号的文档字符串里,使用表示输入,后接期望的输出。例如:

def add(a, b):
    """
    返回两个数的和。

    >>> add(2, 3)
    5
    >>> add(-1, 1)
    0
    """
    return a + b

如何运行嵌入的doctest?

方法一:在代码末尾添加以下内容,直接运行模块:

if __name__ == "__main__":
    import doctest
    doctest.testmod()

保存为 calc.py 后,在命令行执行:
python calc.py —— 如果没有输出,说明所有测试通过。
加上 -v 参数可查看详细过程:python calc.py -v

方法二:从命令行单独运行doctest:

python -m doctest calc.py
python -m doctest -v calc.py  # 显示详情

支持多行输出与异常测试

doctest能处理复杂场景,比如多行返回值或异常:

码上飞 码上飞

码上飞(CodeFlying) 是一款AI自动化开发平台,通过自然语言描述即可自动生成完整应用程序。

码上飞 430 查看详情 码上飞
def divide(a, b):
    """
    执行除法,b为0时抛出异常。

    >>> divide(6, 2)
    3.0

    >>> divide(1, 3)  # doctest: +ELLIPSIS
    0.33...

    >>> divide(1, 0)  # doctest: +IGNORE_EXCEPTION_DETAIL
    Traceback (most recent call last):
    ZeroDivisionError: division by zero
    """
    return a / b
  • 使用 # doctest: +ELLIPSIS 可模糊匹配部分输出。
  • # doctest: +IGNORE_EXCEPTION_DETAIL 忽略异常类型的细节,只检查是否抛出指定异常。

适用位置灵活

doctest可嵌入:

  • 函数的 docstring
  • 类的 docstring
  • 模块的 docstring(文件开头)

只要包含符合格式的交互示例,都能被识别和执行。

基本上就这些。把测试写进文档,既保证了文档的准确性,又实现了轻量级测试。

以上就是python中doctest如何嵌入源码?的详细内容,更多请关注其它相关文章!


# 都能  # 临汾seo优化怎么样  # 网络营销推广指标  # 烟台营销推广机构排名榜  # 望城区广告营销推广公司  # 武昌网站建设制作  # seo优化整合  # 抖音seo矩阵源码下载  # 化工网站建设维护  # 网站设计建设专家名单表  # 网站线上推广运营怎么做  # 相关文章  # 适用于  # doctest  # 行输出  # 就像  # 自然语言  # 抛出  # 命令行  # 如何使用  # 文档  # string类  # ai  # python  # 嵌入源码 


相关栏目: 【 科技资讯46185 】 【 网络学院92790


相关推荐: 荒野行动PC版怎么注册_荒野行动PC版账号注册详细流程图文教程  Golang如何使用bytes.Split分割字节切片_Golang bytes切片分割方法  J*aScript map 方法中处理循环元素为空数组的策略  QQ邮箱登录平台入口 QQ邮箱网页版邮箱官方入口  Yandex搜索引擎官网入口_俄罗斯Yandex免登录一键直达  如何使 Jest 模拟函数默认抛出错误以提高测试效率  聚水潭ERP登录页面入口 聚水潭ERP官网登录界面  谷歌浏览器如何快速清除某个网站的数据_Chrome网站缓存清理方法  我的世界官方游戏入口 我的世界官网平台直达链接  J*aScript类型检查_j*ascript代码规范  J*a递归快速排序中静态变量导致数据累积问题的解决方案  如何高效处理PHP中的Excel数据导入导出?PortPHP/Spreadsheet助你轻松搞定!  CSS子选择器:如何区分并样式化嵌套列表的子层级  TikTok国际版官网直达_TikTok国际版官网直达进入在线观看  LINQ to XML为何解析失败? 深入理解C# XDocument的异常处理  中兴BladeV30怎样用测距估书架层高_iPhone中兴BladeV30测距估书架层高【家装参考】  css子元素高度不一致导致布局错位怎么办_使用align-items:stretch解决高度差异  离线运行Go语言之旅:本地部署与GOPATH配置指南  qq音乐在线播放入口_qq音乐电脑版登录链接  单12V-2×6实现为RTX 5090供电750W!甚至都没敢跑分  Lar*el表单中优雅地处理“返回”按钮以规避验证:最佳实践指南  解决Python单元测试中Mock异常方法调用计数为零的问题  探索高级语言到C/C++的转译路径:以Go为例及内存管理策略  抓大鹅无需下载版 抓大鹅秒玩版入口  如何在 Excel Online 和 Google 表格中更改日期格式  J*a应用集成GitHub CLI与API认证指南  抖音网页版平台入口 抖音网页版官网在线访问教程  PHP表单数据传递:如何通过隐藏输入字段获取动态ID  将JSON对象数组转置为键值对列表的实用指南  QQ邮箱网页版入口登录 QQ邮箱在线邮箱官方通道  知音漫客官网漫画下载_知音漫客网页版阅读记录  响应式容器内容自动缩放与宽高比维持教程  品牌机怎么重装系统 联想/戴尔/惠普笔记本恢复出厂系统教程  魅族20怎样在浏览器开无图省流_iPhone魅族20浏览器开无图省流【流量节省】  EMS快递官网app_中国邮政速递物流手机客户端  必由学官网快捷入口 必由学网页版在线学习平台  在J*a项目里如何构建对象之间的契约_接口约束的实际落地  steam官方网页快速访问 steam账号注册全流程  Win11文件资源管理器卡顿怎么修 Win11重置资源管理器进程优化响应速度【修复方法】  可靠CSGO开箱平台解析 CSGO开箱网合集  J*aScriptWebpack优化_J*aScript构建工具实战  J*a 递归快速排序中静态变量的状态管理与陷阱  MinIO大规模对象列表性能瓶颈深度解析与外部元数据管理策略  Log4j Console Appender性能瓶颈与高并发优化策略  邮政编码查询不到怎么办_邮政编码查询不到的常见原因与对策  Go语言中对Map值调用带指针接收者方法:原理与最佳实践  html网页设计源代码怎么运行_运行html网页设计源代码步骤【指南】  vivo浏览器怎么扫描二维码 vivo浏览器内置扫一扫功能使用方法  在Runstone环境中高效处理TasteDive API的JSON数据  sublime如何配置Python开发环境_将sublime打造成轻量级Python IDE 

搜索