在编写python doctests时,如何在测试中的字符串中正确引入换行符?这是一个简单的例子:
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: '"'
答案 0 :(得分:18)
你需要逃避反斜杠。
docstring本身就是一个字符串,其中\n
表示换行符。在
def foo():
"""
print "Hello world\n";
"""
pass
docstring不包含有效的Python语句,而是在引用的字符串
中包含换行符答案 1 :(得分:15)
docstring docs实际上提到了问题,但并不完全清楚。
其他几个stackoverflow线程here和here很有帮助,但根据我自己的搜索条件,不容易找到。
这是我的实际解决方案:
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())
原始代码段改变了三件事:
print()
。\n
和\r
之间的区别感到困惑。 (那是我的。)希望这可以节省其他人花费我几个小时的时间。
答案 2 :(得分:7)
在我的情况下,只需在我的docstring前加上'r'。 Python 3.5.1。