打印字符串时 SageMathCell ValueError(有时)

SageMathCell ValueError When Printing String (Sometimes)

当我使用指定的参数执行this SageMathCell时,有时会正确执行,有时会出现以下错误:

ValueError                                Traceback (most recent call last)
<ipython-input-1-253427808e04> in <module>()
    117             show(plot(t,title=heading,vertex_labels=False,layout='tree',figsize=Integer(4)))
    118         else:
--> 119             print heading
    120         L = successor(L)
    121     else:

/home/sc_serv/sage/local/lib/python2.7/site-packages/ipykernel/iostream.py in write(self, string)
    315 
    316             is_child = (not self._is_master_process())
--> 317             self._buffer.write(string)
    318             if is_child:
    319                 # newlines imply flush in subprocesses

ValueError: I/O operation on closed file

错误始终指向第 119 行,该行仅打印一个字符串。此行出现在执行多次的循环中,并且发生错误的特定 iteration 似乎是完全随机的。有时循环快结束了,有时它只在几次迭代后就崩溃了。更奇怪的是,如果我将 print_images 设置为 true(这会导致标题打印为图形的一部分而不是简单的字符串),则永远不会发生错误。这是怎么回事?

这里有一个解决方法:不是在循环的每次迭代时打印输出,而是将整个输出存储在一个字符串中并在执行结束时打印一次。这可以通过替换

的所有实例来实现
print heading

output = output + '\n' + heading

原来这个问题在过去已经解决了,但是由于当前的 ipykernel master 的版本是 4.3.0dev 而最新版本是 4.3.1,所以又回来了。我已经调整了安装命令并且无法再重现问题 - 错误行现在已正确包装。感谢举报!