When writing python doctests, how does one properly introduce newline characters within a string in the test? Here's a simple example:
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())
The output of which is:
Traceback (most recent call last):
...
ValueError: line 3 of the docstring for NoName has inconsistent leading whitespace: '"'
The docstring docs actually allude to the problem, but not entirely clearly.
A couple of other stackoverflow threads here and here were helpful, but not easy to find given my own search criteria.
Here is my actual solution:
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())
Three things have changed from the original code snippet:
print()
on the function output.\n
and \r
. (That one's on me.)Hope this saves someone else the couple of hours I spent on this.
You need to escape the backslash.
The docstring is itself a string where \n
means newline. In
def foo():
"""
print "Hello world\n";
"""
pass
the docstring doesn't contain a valid Python statement but contains instead a newline inside the quoted string
Just prefixing my docstring with 'r' worked in my case. Python 3.5.1.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With