8

有一个函数 fix(),作为将字符串写入文本文件的输出函数的辅助函数。

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')
                  ^

无论我使用什么 \ 和 's 组合,doctest 似乎都不想工作,即使函数本身运行良好。怀疑这是 doctest 在块注释中的结果,但有解决此问题的任何提示。

4

2 回答 2

8

这是你想要的吗?:

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()

原始字符串是你的朋友......

于 2012-08-01T18:47:08.623 回答
1

首先,如果您在交互式解释器中实际调用您的函数,会发生这种情况:

>>> 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"

"""
于 2012-08-01T18:46:51.673 回答