首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在python doctest结果字符串中包含特殊字符(制表符、换行符)?

如何在python doctest结果字符串中包含特殊字符(制表符、换行符)?
EN

Stack Overflow用户
提问于 2012-01-12 20:14:49
回答 3查看 26.7K关注 0票数 19

给定以下python脚本:

代码语言:javascript
复制
# dedupe.py
import re

def dedupe_whitespace(s,spacechars='\t '):
    """Merge repeated whitespace characters.
    Example:
    >>> dedupe_whitespace(r"Green\t\tGround")  # doctest: +REPORT_NDIFF
    'Green\tGround'
    """
    for w in spacechars:
        s = re.sub(r"("+w+"+)", w, s)
    return s

该函数在python解释器中按预期工作:

代码语言:javascript
复制
$ python
>>> import dedupe
>>> dedupe.dedupe_whitespace('Purple\t\tHaze')
'Purple\tHaze'
>>> print dedupe.dedupe_whitespace('Blue\t\tSky')
Blue    Sky

但是,doctest示例失败,因为制表符在与结果字符串进行比较之前被转换为空格:

代码语言:javascript
复制
>>> import doctest, dedupe
>>> doctest.testmod(dedupe)

给出

代码语言:javascript
复制
Failed example:
    dedupe_whitespace(r"Green           Ground")  #doctest: +REPORT_NDIFF
Differences (ndiff with -expected +actual):
    - 'Green  Ground'
    ?       -
    + 'Green Ground'

如何对doctest heredoc字符串中的制表符进行编码,以便正确执行测试结果比较?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-01-13 19:21:17

我已经通过对docstring使用文字字符串表示法实现了这个功能:

代码语言:javascript
复制
def join_with_tab(iterable):
    r"""
    >>> join_with_tab(['1', '2'])
    '1\t2'
    """

    return '\t'.join(iterable)

if __name__ == "__main__":
    import doctest
    doctest.testmod()
票数 16
EN

Stack Overflow用户

发布于 2012-01-14 07:15:24

是原始的heredoc string notation (r""")实现了这个功能:

代码语言:javascript
复制
# filename: dedupe.py
import re,doctest
def dedupe_whitespace(s,spacechars='\t '):
    r"""Merge repeated whitespace characters.
    Example:
    >>> dedupe_whitespace('Black\t\tGround')  #doctest: +REPORT_NDIFF
    'Black\tGround'
    """
    for w in spacechars:
        s = re.sub(r"("+w+"+)", w, s)
    return s

if __name__ == "__main__":
    doctest.testmod()
票数 11
EN

Stack Overflow用户

发布于 2018-10-19 22:28:02

我通过转义预期字符串中的制表符使其正常工作:

代码语言:javascript
复制
>>> function_that_returns_tabbed_text()
'\\t\\t\\tsometext\\t\\t'

而不是

代码语言:javascript
复制
>>> function_that_returns_tabbed_text()
\t\t\tsometext\t\t
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8834916

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档