文档似乎不太清楚如何解决以下问题......
def test():
"""
>>> import doctest
>>> doctest.ELLIPSIS_MARKER = '<ignore>'
>>> import pandas as pd
>>> raise pd.errors.InvalidIndexError # doctest: +ELLIPSIS, +NORMALIZE_WHITESPACE
Traceback (most recent call last):
<ignore>
<ignore>InvalidIndexError
"""
import doctest
doctest.run_docstring_examples(test, globals())
这可以正常工作,但不能解决
<ignore>InvalidIndexError
前面的通配符问题
def test():
"""
>>> import doctest
>>> doctest.ELLIPSIS_MARKER = '<ignore>'
>>> import pandas as pd
>>> raise pd.errors.InvalidIndexError # doctest: +ELLIPSIS, +NORMALIZE_WHITESPACE
Traceback (most recent call last):
<ignore>
pandas.errors.InvalidIndexError
"""
import doctest
doctest.run_docstring_examples(test, globals())
注意 pandas 版本是
1.1.3
参考文献
doctest
要求异常以某种方式呈现。来自文档:
回溯堆栈(如果存在)的每一行都必须比示例的第一行缩进得更远,或以非字母数字字符开头。回溯标头后面的第一行缩进相同的并以字母数字开头,被视为异常详细信息的开始。
(加粗)
这意味着如果您使
ELLIPSIS_MARKER
以字母数字开头,它将正常工作。这是使用 re.error
的示例:
def test():
"""
>>> import doctest
>>> doctest.ELLIPSIS_MARKER = 'MODULE.'
>>> import re
>>> raise re.error(None) # doctest: +ELLIPSIS
Traceback (most recent call last):
...
MODULE.error: None
"""
顺便说一下:
请注意,回溯的处理方式非常特殊。特别是,在重写的示例中,
的使用独立于 doctest 的...
选项。该示例中的省略号可以省略,也可以是三个(或三百)个逗号或数字,或者 Monty Python 短剧的缩进抄本。ELLIPSIS
对于上下文,这里有一个无一例外使用两个省略号的示例:
def test():
r"""
>>> print('foo\nbar\nbaz') # doctest: +ELLIPSIS
foo
...
...
"""
IGNORE_EXCEPTION_DETAIL
可能是更好的解决方案。 (我自己才知道。)
指定后,如果引发预期类型的异常,则预期异常的示例将通过,即使异常详细信息不匹配。例如,如果实际引发的异常是
,则期望ValueError: 42
的示例将通过,但会失败,例如,如果引发ValueError: 3*14
。TypeError
它还会忽略 Python 3 doctest 报告中使用的模块名称。
(加粗)
例如:
def test():
"""
>>> import re
>>> raise re.error(None) # doctest: +IGNORE_EXCEPTION_DETAIL
Traceback (most recent call last):
...
error: foobar
"""
请注意,此示例中忽略了异常模块 和 异常详细信息。这是故意的,以显示该解决方案的副作用。
或者,根据实际的代码/测试,catch错误可能更有意义,例如:
def test():
"""
>>> import re
>>> try:
... raise re.error(None) # Obviously this would be different
... except re.error as e:
... print(e)
None
"""