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

doctestをオンにすると、次のエラーが発生します。

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

\と'の組み合わせをどのように使用しても、関数自体は完全に機能しますが、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は結果の文字列の表現でこれを行わないことに注意してください。バックスラッシュのみがエスケープされます。

これは、正しいdocstringが(テストされていない!)であることを意味します。

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

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

"""

これを読みやすくするために、このdocstringに生の文字列リテラルを使用します。

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

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

"""
于 2012-08-01T18:46:51.673 に答える