【问题标题】:python comment in docstring文档字符串中的 python 注释
【发布时间】:2018-11-02 03:30:00
【问题描述】:

我发现这个是因为我遇到的一些家庭作业问题是通过文档字符串测试的,它让我失败了。

例如:

def foo(x):
    """
    >>> foo(5)
    25
    >>> foo(6)
    36  # Are you sure?
    """
    return x**2

if __name__ == '__main__':
    import doctest
    doctest.testmod(verbose=True)

上面的例子失败了:

Expected:
    36  # are you sure?
Got:
    36

我想知道我们是否不应该在文档字符串中添加注释?还是有办法让python忽略docstring中的注释?

【问题讨论】:

  • @ViswanathPolaki 我不确定我是否理解您的评论
  • 对不起,我添加了错误的 cmets,我会尽力回复您。
  • @MadPhysicist 这两个答案在技术上是相同的原理,但他反应较早。
  • @Code_Control_jxie0755。我同意。我只是想从未回答的队列中删除问题。
  • 通常最好将 docstring 主要用于其原始目的,并将 doctest 的解释放在 doctest 之前。它显示在文档的第一个示例中:docs.python.org/3/library/doctest.html

标签: python python-3.x docstring


【解决方案1】:

Doctest 通过从命令行捕获标准输出来工作。测试字符串中提供的文本必须与您的输出完全匹配。 Doctest 无法知道您输出的是什么类型的数据:它只能比较文本输出。在您的情况下,它是一个整数,后跟一个注释,但是如果您改为执行以下操作会怎样:

>>> print('36   # are you sure?')

您想要的任何 cmets 都必须在可执行行中:

>>> foo(6)  # are you sure?
36

也许这在视觉上没有那么吸引人,但几乎可以达到相同的目的并且确实有效。当带有注释的行被传递给解释器时,注释会被正确处理。

【讨论】:

    【解决方案2】:

    你可以像下面这样添加你的 cmets

    >>> # comments are ignored
    

    参考https://docs.python.org/3/library/doctest.html

    注意:这不能是输出的一部分,所以如果你想添加评论,那么你可以使用一个新行来写你的评论。因此,在您的情况下,“36”行不得包含除输出以外的任何其他字符串。

    【讨论】:

      猜你喜欢
      • 2010-12-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-04
      • 2016-06-06
      • 1970-01-01
      • 2015-01-25
      • 2010-12-09
      相关资源
      最近更新 更多