文档测试涉及转义字符(Doctest Involving Escape Characters)

2019-09-20 15:45发布

有一个函数修复(),作为一个辅助功能,其字符串写入到一个文本文件的输出功能。

def fix(line):
    """
    returns the corrected line, with all apostrophes prefixed by an escape character

    >>> fix('DOUG\'S')
    'DOUG\\\'S'

    """
    if '\'' in line:
        return line.replace('\'', '\\\'')
    return line

打开文档测试,我得到以下错误:

Failed example:
    fix('DOUG'S')
Exception raised:
    Traceback (most recent call last):
      File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/doctest.py", line 1254, in __run
        compileflags, 1) in test.globs
      File "<doctest convert.fix[0]>", line 1
        fix('DOUG'S')
                  ^

不管我用什么样的\组合和年代,文档测试似乎并不想工作,即使函数本身完美的作品。 有一个怀疑,它是文档测试块中的注释是的结果,但任何提示,以解决这个问题。

Answer 1:

这是你想要的吗?:

def fix(line):
    r"""
    returns the corrected line, with all apostrophes prefixed by an escape character

    >>> fix("DOUG\'S")
    "DOUG\\'S"
    >>> fix("DOUG'S") == r"DOUG\'S"
    True
    >>> fix("DOUG'S")
    "DOUG\\'S"

    """
    return line.replace("'", r"\'")

import doctest
doctest.testmod()

原始字符串是你的朋友?



Answer 2:

首先,这是如果你真的打电话给你的功能在交互式解释发生了什么:

>>> fix("Doug's")
"Doug\\'s"

请注意,您不需要在双引号字符串逃脱单引号,而Python没有在结果字符串的表示做到这一点 - 只有反斜杠被逃脱。

这意味着正确的文档字符串应该是(未经测试!)

"""
returns the corrected line, with all apostrophes prefixed by an escape character

>>> fix("DOUG'S")
"DOUG\\\\'S"

"""

我会使用一个原始字符串字面这个文档字符串,使这个更具可读性:

r"""
returns the corrected line, with all apostrophes prefixed by an escape character

>>> fix("DOUG'S")
"DOUG\\'S"

"""


文章来源: Doctest Involving Escape Characters