给定以下python脚本:
# 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解释器中按预期工作:
$ python
>>> import dedupe
>>> dedupe.dedupe_whitespace('Purple\t\tHaze')
'Purple\tHaze'
>>> print dedupe.dedupe_whitespace('Blue\t\tSky')
Blue Sky
但是,doctest示例失败,因为制表符在与结果字符串进行比较之前被转换为空格:
>>> import doctest, dedupe
>>> doctest.testmod(dedupe)
给出
Failed example:
dedupe_whitespace(r"Green Ground") #doctest: +REPORT_NDIFF
Differences (ndiff with -expected +actual):
- 'Green Ground'
? -
+ 'Green Ground'
如何对doctest heredoc字符串中的制表符进行编码,以便正确执行测试结果比较?
发布于 2012-01-13 19:21:17
我已经通过对docstring使用文字字符串表示法实现了这个功能:
def join_with_tab(iterable):
r"""
>>> join_with_tab(['1', '2'])
'1\t2'
"""
return '\t'.join(iterable)
if __name__ == "__main__":
import doctest
doctest.testmod()
发布于 2012-01-14 07:15:24
是原始的heredoc string notation (r"""
)实现了这个功能:
# 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()
发布于 2018-10-19 22:28:02
我通过转义预期字符串中的制表符使其正常工作:
>>> function_that_returns_tabbed_text()
'\\t\\t\\tsometext\\t\\t'
而不是
>>> function_that_returns_tabbed_text()
\t\t\tsometext\t\t
https://stackoverflow.com/questions/8834916
复制相似问题