在 Mac 终端上的 doctest 中 运行 +NORMALIZE WHITESPACE 时出错

Error when running +NORMALIZE WHITESPACE in doctest on Mac terminal

当我 运行 在 Mac 终端中进行以下 doctest

>>> import sys
>>> [1, 2, 3, 4, 5, 6, 7, 8, 9]
... # doctest: +NORMALIZE_WHITESPACE
[1, 2, 3,
4, 5, 6,
7, 8, 9]
>>> sys.stdout.write("This text contains weird spacing.")
... # doctest: +NORMALIZE_WHITESPACE
This text contains weird spacing.

我得到以下输出,最后有一个“33”,这使得该测试失败。 知道如何纠正这个吗?

File "test2.txt", line 8, in test2.txt
Failed example:
    sys.stdout.write("This text contains weird spacing.")
    # doctest: +NORMALIZE_WHITESPACE
Expected:
    This text contains weird spacing.
Got:
    This text contains weird spacing.33
**********************************************************************
1 items had failures:
   1 of   3 in test2.txt
***Test Failed*** 1 failures.

sys.stdout.write 是 returns 写入的字符数量的函数。 在返回 之前,它将参数写入控制台。因此,当您调用 sys.stdout.write("This text contains weird spacing.") 时,字符串会写入控制台,然后返回字符串的长度 (33)。这就是 doctest 获得 This text contains weird spacing.33 的原因。

我建议您改用 print 方法:

>>> print("This text contains weird spacing.")
... # doctest: +NORMALIZE_WHITESPACE
This text contains weird spacing.

如果您必须使用 sys.stdout.write,您可以捕获返回值,这样它会被 doctest 忽略。像这样:

>>> ln = sys.stdout.write("This text contains weird spacing.")
... # doctest: +NORMALIZE_WHITESPACE
This text contains weird spacing.