Учение Python с символами новой строки: несогласованная ведущая ошибка пробела

При написании доктрин python, как правильно вводить символы новой строки в строке в тесте? Вот простой пример:

def remove_newlines(text):
    """
    >>> remove_newlines("line1 \n"
    ...                 "still line 1\r"
    ...                 "now line2 \n"
    ...                 "more line2\n")
    line1 still line1
    now line2 more line2
    """
    return text.replace('\n', '')

import doctest
doctest.run_docstring_examples(remove_newlines, globals())

Выходной сигнал которого:

Traceback (most recent call last):
...
ValueError: line 3 of the docstring for NoName has inconsistent leading whitespace: '"'

Ответы

Ответ 1

Вам нужно избежать обратного слэша.

Docstring сама является строкой, где \n означает новую строку. В

def foo():
    """
    print "Hello world\n";
    """
    pass

docstring не содержит действительный оператор Python, но вместо этого содержит строку новой строки внутри строки с кавычками

Ответ 2

docstring docs действительно ссылаются на проблему, но не совсем ясно.

Несколько других потоков stackoverflow здесь и здесь были полезны, но нелегко найти, учитывая мои собственные критерии поиска.

Вот мое фактическое решение:

def remove_CRs(text):
    r"""
    >>> output = remove_CRs("line1 \r"
    ...                     "still line1\n"
    ...                     "now line2 \r"
    ...                     "more line2\r")
    >>> print(output)
    line1 still line1
    now line2 more line2
    """
    return text.replace('\r', '')

import doctest
doctest.run_docstring_examples(remove_CRs, globals())

Из исходного фрагмента кода изменились три вещи:

  • docstring должна быть исходной строкой python.
  • Мне пришлось использовать print() на выходе функции.
  • Мне пришлось преодолеть свое собственное замешательство с разницей между \n и \r. (Это на мне.)

Надеюсь, это спасет кого-то еще пару часов, которые я потратил на это.

Ответ 3

Просто префикс моей docstring с 'r' работал в моем случае. Python 3.5.1.