Python文档中的多行字符串输出

2024-09-27 21:25:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个Python3函数,它返回一个多行字符串。我想用doctest测试一下,但没法用。我尝试过使用+NORMALIZE_WHITESPACEdirective,但没有成功。在

def dummy():
    """Dummy test function

    >>> dummy()  # doctest: +NORMALIZE_WHITESPACE
    '''Hello Mum
    Hello Dad'''
    """
    return """Hello Mum
    Hello Dad"""

if __name__ == "__main__":
    import doctest
    doctest.testmod()

以上代码因以下错误而失败:

^{pr2}$

我尝试更改doctest行,以包含一个文本\n,如下所示:

^{3}$

但这失败了,错误几乎相同:

Failed example:
    dummy()  # doctest: +NORMALIZE_WHITESPACE
Expected:
    'Hello Mum
    Hello Dad'
Got:
    'Hello Mum\n    Hello Dad'

如何使用doctest测试多行字符串输出?在


Tags: 函数字符串testhellodef错误python3doctest
2条回答

正如我在评论中所提到的,一个不需要在doctest字符串中使用\n文本的方法是print输出,然后与之匹配,例如

def dummy():
    """Dummy test function

    >>> a = dummy()
    >>> print(a)
    Hello Mum
    Hello Dad

    """
    return """Hello Mum
Hello Dad"""

if __name__ == "__main__":
    import doctest
    doctest.testmod()

问题是\n被解释为docstring中的新行,但是doctest需要一个文本反斜杠。在

医生的帮助说(重点是我的):

If you continue a line via backslashing in an interactive session, or for any other reason use a backslash, you should use a raw docstring, which will preserve your backslashes exactly as you type them

所以他们建议如下(注意r前的"""):

def dummy():
    r"""Dummy test function

    >>> dummy()
    'Hello Mum\n    Hello Dad'
    """
    return """Hello Mum
    Hello Dad"""

if __name__ == "__main__":
    import doctest
    doctest.testmod()

如果使用\\n而不是\n,那么没有前导的r也可以工作,但是最好还是坚持使用可以从python REPL复制粘贴的r版本。在

相关问题 更多 >

    热门问题