Python为什么需要reload(sys)后在设置默认编码

Python启动时默认加载site.py:https://hg.python.org/cpython/file/2.7/Lib/site.py#l545

site.py的main函数出有一块代码:

# Remove sys.setdefaultencoding() so that users cannot change the
# encoding after initialization.  The test for presence is needed when
# this module is run as a script, because this code is executed twice.
if hasattr(sys, "setdefaultencoding"):
    del sys.setdefaultencoding

因此,如果需要在运行时设置默认编码,就需要重新reload,sys模块。

site.py的作用是加载site-packages中的包和模块到python的sys.path里面,让你可以在代码中import你安装的包。

以后在见到这样的代码也就不用奇怪了:

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