使用reload(sys)后,结果停止显示在IDLE shell中

时间:2016-05-02 10:04:01

标签: python-2.7 character-encoding python-idle

在python 2.7 shell中,执行以下操作后:

import sys
reload(sys)
sys.setdefaultencoding('utf-8')

shell停止显示结果。如果我输入print('hello world'),则不会显示任何内容。

顺便说一下,为什么reload(sys)在这里必不可少?没有它,setdefaultencoding()会导致错误吗?

1 个答案:

答案 0 :(得分:0)

关于需要reload(sys)的问题与IDLE无关。阅读2.7 doc条目的最后一句。

  

sys.setdefaultencoding函数(名称)

     

设置Unicode实现使用的当前默认字符串编码。   如果name与任何可用的编码不匹配,   引发了LookupError。此功能仅供以下人员使用   站点模块实现,并在需要时由sitecustomize实现。   一旦由站点模块使用,它将从sys模块中删除   命名空间。

你不应该使用这个功能。在3.x中,它已被删除(或不可见)。因此来自标准Python控制台解释器的以下内容。

C:\Users\Terry>py
Python 2.7.11 (v2.7.11:6d1b6a68f775, Dec  5 2015, 20:40:30) [MSC v.1500 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys
<module 'sys' (built-in)>
>>> sys.setdefaultencoding
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'module' object has no attribute 'setdefaultencoding'

在2.7中,重新加载重新初始化模块,撤消删除。因此

>>> reload(sys)
<module 'sys' (built-in)>
>>> sys.setdefaultencoding
<built-in function setdefaultencoding>

编辑:删除了不相关的材料,并添加了以下正确答案。

关于打印问题:重新加载撤消IDLE对输出流的修改。这会禁用打印命令。他们执行(不要加注)但实际上没有发送任何内容。

>>> print 'abc', u'abc'
>>> 

以上是在重新加载之后但在调用恢复的setdefaultencoding之前。我打算在IDLE doc警告中添加一条注释,重新加载sys会通过撤消其修改来禁用IDLE。