Python doctest如何在输出中匹配单引号或双引号,而不是仅匹配单引号

2024-05-15 11:03:41 发布

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

我通常使用code auto-formatter ^{},它训练我使用双引号。 对我来说,使用双引号已经成为“肌肉记忆”

许多类的默认repr使用单引号从Python交互输出打印。我知道doctest试图重现Python交互输出

有没有简单的方法让doctest匹配单引号或双引号

我知道一个选择是定制^{}。我想知道是否有更简单的选择


代码示例

from dataclasses import dataclass


@dataclass
class SomeDataClass:
    """Contains a string."""

    data: str


def get_some_dataclass(data: str) -> SomeDataClass:
    """Get a data class containing some specified data.

    Returns:
        Data class containing the data.

    Examples:
        >>> get_some_dataclass("hi")
        SomeDataClass(data="hi")

    """
    return SomeDataClass(data=data)


if __name__ == "__main__":
    import doctest

    doctest.testmod()

输出:

**********************************************************************
File "quote_or_apostrophe.py", line 23, in __main__.get_some_dataclass
Failed example:
    get_some_dataclass("hi")
Expected:
    SomeDataClass(data="hi")
Got:
    SomeDataClass(data='hi')
**********************************************************************

版本

我通过pytest的doctest integration调用doctest

python==3.8.2
pytest==5.4.1

Tags: importdatagetpytestmainsomehidoctest
1条回答
网友
1楼 · 发布于 2024-05-15 11:03:41

我想你可以用blacken-docs实现这一点,但我还没有看到这样的例子

以下方法之一:

  • 将字符串保留为黑色标准(双引号),并找到一种方法来转换预期的输出doctest,使其具有双引号(以某种方式在其上运行黑色?)
  • 在应用单引号设置的情况下运行blacken-docs,这也避免了您自己去考虑它

我会本能地选择第一个选项,因为感觉它能更好地解决问题,但我希望后一个选项更容易实现(不需要过多考虑这一点会更好)

不过,仔细研究一下,目前似乎不支持according to this issue,并且在某些代码上运行blacken-docs>>>doctest块中打印双引号__repr__不会影响所述双引号

我对这个问题以及它所链接的另一个问题的解释是blacken-docs不支持以下格式的代码块:

"""
Docstring starts here.

Code example comes next:

  >>> from some_module import some_func
  >>> some_func(1, 2)
  "1+2"

"""

我已尝试以建议的格式重写代码:

"""
Docstring starts here.

Code example comes next:

.. code-block:: python

    >>> from some_module import some_func
    >>> some_func(1, 2)
    "1+2"

"""

但这给了我

code block parse error Cannot parse: 1:0: >>> from some_module import some_func

所以我不打算使用blacken文档或更详细的.. code-block: python格式,也许到时候它会得到支持

相关问题 更多 >