为什么分号不抑制 doctests 中的输出?
Why do semicolons not suppress output in doctests?
为什么分号不抑制 doctests 中的输出?解决方法是分配结果,但我很好奇为什么这不起作用。
"""
>>> 1+1; # Semicolons typically suppress output, but this fails
>>> x = 1+1 # Workaround: assign result to suppress output.
"""
Failed example:
1+1;
Expected nothing
Got:
2
您正在考虑 MATLAB 或 IPython 或其他东西。 Python 分号通常不会隐藏任何内容。 doctest
模拟正常的交互式 Python 会话,而不是 IPython 会话,因此分号不执行任何操作。
与 C/C++ 等其他语言不同,分号是 可选的 语句的终止符 Python,如您在下面的 Repl 中所见:
Python 3.6.5 |Anaconda custom (64-bit)| (default, Mar 29 2018, 13:32:41) [MSC v
1900 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> 1 + 1;
2
>>> 1 + 1
2
但是,您可能会在 IPython:
中观察到不同的行为
In [120]: 1 + 1;
In [121]: 1 + 1
Out[121]: 2
IPython 的 docs 建议使用分号来抑制输出。但是,此行为仅特定于 IPython,不会以任何方式扩展到 Python 或其标准库(如 doctest)。
分号根本没有作用。
Doctest 从 Python 语句之后的行(即 >>>
之后的部分)读取预期结果。在您的示例中,没有结果,因此 doctest 预计没有结果。这就是它报告 "Expected nothing" 的原因。但是,1+1
returns 2
.
第二个表达式x = 1+1
没有结果,所以测试成功(虽然没有真正测试)。
例如试试这个:
"""
>>> 1+1 # without semicolon
2
>>> 1+1; # with semicolon
2
>>> x = 1+1 # not so useful test
"""
为什么分号不抑制 doctests 中的输出?解决方法是分配结果,但我很好奇为什么这不起作用。
"""
>>> 1+1; # Semicolons typically suppress output, but this fails
>>> x = 1+1 # Workaround: assign result to suppress output.
"""
Failed example:
1+1;
Expected nothing
Got:
2
您正在考虑 MATLAB 或 IPython 或其他东西。 Python 分号通常不会隐藏任何内容。 doctest
模拟正常的交互式 Python 会话,而不是 IPython 会话,因此分号不执行任何操作。
与 C/C++ 等其他语言不同,分号是 可选的 语句的终止符 Python,如您在下面的 Repl 中所见:
Python 3.6.5 |Anaconda custom (64-bit)| (default, Mar 29 2018, 13:32:41) [MSC v
1900 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> 1 + 1;
2
>>> 1 + 1
2
但是,您可能会在 IPython:
中观察到不同的行为In [120]: 1 + 1;
In [121]: 1 + 1
Out[121]: 2
IPython 的 docs 建议使用分号来抑制输出。但是,此行为仅特定于 IPython,不会以任何方式扩展到 Python 或其标准库(如 doctest)。
分号根本没有作用。
Doctest 从 Python 语句之后的行(即 >>>
之后的部分)读取预期结果。在您的示例中,没有结果,因此 doctest 预计没有结果。这就是它报告 "Expected nothing" 的原因。但是,1+1
returns 2
.
第二个表达式x = 1+1
没有结果,所以测试成功(虽然没有真正测试)。
例如试试这个:
"""
>>> 1+1 # without semicolon
2
>>> 1+1; # with semicolon
2
>>> x = 1+1 # not so useful test
"""