gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 04:05:03 27 4
gpt4 key购买 nike

我通常使用 code auto-formatter Black ,它训练我使用双引号。使用双引号已成为我的“肌肉内存”。

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

是否有一些简单的方法让 doctest 匹配单引号或双引号?

我知道一个选择是定制 doctest.OutputChecker .我想知道是否有更简单的选择。


代码示例

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

最佳答案

我想您可以使用 blacken-docs 实现这一目标但我还没有看到这样做的例子......

两种方法之一:

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

我会本能地选择第一个选项,因为感觉它能更好地解决问题,但我希望后者更容易(而且 TBH 不需要考虑太多会更好)。

虽然调查了一下,但目前似乎不支持 according to this issue ,并在 >>> doctest block 中打印双引号 __repr__ 的某些代码上运行 blacken-docs 不会影响所述双引号.

我对该问题及其链接的另一个问题的解释是 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-docs 或更冗长的 .. code-block: python 格式,也许它会及时得到支持。

关于Python doctest 如何在输出中匹配单引号或双引号而不是仅匹配单引号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62643105/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com