Учение 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.