在Jupyter Notebook单元的输出上运行测试

时间:2018-11-11 17:06:33

标签: python-3.x jupyter-notebook jupyter-lab

我正在使用Jupyter Notebook或Jupyter Lab来教授Python的基础知识。

是否可以在不抑制单元格输出的情况下对先前单元格的标准输出进行测试?

具有标准配置的

Magic %%capture重定向标准输出。我希望能够在运行测试之前仍然看到单元的输出。

例如

[cell 1] >> print('Hello, world!')
Hello, world!

测试单元:

[cell 2] >>  if (cell1.stdout == 'Hello, world!'):
         ...    print('Success!')
         ... else:
         ...    print('Tests failed')

1 个答案:

答案 0 :(得分:1)

这非常简单,只需使用自定义函数包装%%capture魔术,即可显示捕获的输出:

from IPython.core import magic

@magic.register_cell_magic
def non_suppressing_capture(variable, cell):
    get_ipython().magics_manager.magics['cell']['capture'](variable, cell)
    globals()[variable].show()

并且(在执行完以上代码之后)像这样使用它:

%%non_suppressing_capture cell1
print('Hello, world!')

实际上,除非添加测试字符串的换行符,否则测试将失败:

if cell1.stdout == 'Hello, world!\n':
    print('Success!')
else:
    print('Tests failed')

IPython魔术是一个强大的工具。您可以在文档中找到更多高级示例,请参见:defining custom magics章和API文档:core.magiccore.magic_arguments