Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 重新加载(sys)会导致后续执行丢失其`Out[n]:`tag_Python_Ipython - Fatal编程技术网

Python 重新加载(sys)会导致后续执行丢失其`Out[n]:`tag

Python 重新加载(sys)会导致后续执行丢失其`Out[n]:`tag,python,ipython,Python,Ipython,我刚刚注意到这种与交互式使用ipythonshell有关的特殊行为。我认为下面的例子很直观地说明了我的意思: 调用一个新的ipython会话;执行以下语句,注意Out[n]的丢失:reload(sys)语句后的标签 In [1]: import sys In [2]: 1 Out[2]: 1 In [3]: reload(sys) <module 'sys' (built-in)> In [4]: 1 1 [1]中的:导入系统 在[2]中:1 Out[2]:1 在[3]中:重

我刚刚注意到这种与交互式使用
ipython
shell有关的特殊行为。我认为下面的例子很直观地说明了我的意思:

调用一个新的
ipython
会话;执行以下语句,注意
Out[n]的丢失:
reload(sys)语句后的标签

In [1]: import sys

In [2]: 1
Out[2]: 1

In [3]: reload(sys)
<module 'sys' (built-in)>

In [4]: 1
1
[1]中的
:导入系统
在[2]中:1
Out[2]:1
在[3]中:重新加载(系统)
在[4]中:1
1.
版本信息是Python2.7.10和iPython2.4.1,Fedora22


这是CPython和/或IPython的bug吗?如果没有,为什么会出现这种行为?

答案在于ipython的
sys.displayhook
,它与系统版本不同。从
帮助(sys)

当您重新加载(sys)时,它会拉入系统版本的
sys
,而不是ipython,因此它没有补丁版本:

In [1]: import sys

In [2]: print sys.displayhook
<IPython.core.displayhook.DisplayHook object at 0x105bc1dd0>

In [3]: reload(sys)
<module 'sys' (built-in)>

In [4]: print sys.displayhook
<built-in function displayhook>
[1]中的
:导入系统
在[2]中:打印sys.displayhook
在[3]中:重新加载(系统)
在[4]中:打印sys.displayhook
您可以在ipython代码库中看到它的代码。如果你真的在乎,你甚至可以解决这个问题:

In [1]: import sys

In [2]: print sys.displayhook
<IPython.core.displayhook.DisplayHook object at 0x10ba2ddd0>

In [3]: dh = sys.displayhook

In [4]: reload(sys)
<module 'sys' (built-in)>

In [5]: print sys.displayhook
<built-in function displayhook>

In [6]: 2
2

In [7]: sys.displayhook = dh

In [8]: 2
Out[8]: 2
[1]中的
:导入系统
在[2]中:打印sys.displayhook
在[3]中:dh=sys.displayhook
在[4]中:重新加载(系统)
在[5]中:打印sys.displayhook
在[6]中:2
2.
在[7]中:sys.displayhook=dh
[8]:2
Out[8]:2
IPython使用作为输入提示,并为输出添加
sys.ps3
。要使在输出上显示<代码>系统ps3
,已设置:

sys.displayhook
在计算交互式Python会话中输入的表达式的结果时调用。可以通过将另一个单参数函数指定给
sys.displayhook
来自定义这些值的显示

重新加载将挂钩重置为默认值
None

将其重置为:

from IPython import get_ipython
get_ipython().display_trap.set()
这比预先存储
DisplayHook
实例更方便

from IPython import get_ipython
get_ipython().display_trap.set()