基础入门_Python-模块和包.setdefaultencoding前为何要reload(sys)?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基础入门_Python-模块和包.setdefaultencoding前为何要reload(sys)?相关的知识,希望对你有一定的参考价值。

简单说明:

说明: 多次重复使用import语句时,不会重新加载模块,而是把该模块的内存地址给引用到本地环境变量

#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
#
# Authors: limanman
# 51CTOBG: http://xmdevops.blog.51cto.com/
# Purpose:
#
"""
# 说明: 导入公共模块
import sys
try:
    sys.setdefaultencoding(‘utf-8‘)
except Exception, e:
    print e
    reload(sys)
    sys.setdefaultencoding(‘utf-8‘)
    print sys.getdefaultencoding()
# 说明: 导入其它模块

if __name__ == ‘__main__‘:
    pass


重新加载:

说明: 对已经加载的模块进行重新加载,一般用于原模块有变化等特殊情况,reload前该模块必须已经import过,但是需要注意的是已经使用的实例还会使用旧模块,而新产生的实例才会使用新模块,reload之后还是原来的内存地址

#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
#
# Authors: limanman
# 51CTOBG: http://xmdevops.blog.51cto.com/
# Purpose:
#
"""
# 说明: 导入公共模块
import sys
try:
    sys.setdefaultencoding(‘utf-8‘)
except Exception, e:
    print e
    reload(sys)
    sys.setdefaultencoding(‘utf-8‘)
    print sys.getdefaultencoding()
# 说明: 导入其它模块

if __name__ == ‘__main__‘:
    pass

技术分享

说明: 很多人不名为为何要reload()一下sys才能使用setdefaultencoding设置编码,其实是因为解释器初始化时预先执行了/usr/lib64/python2.7/site.py,而在其554行代码中del sys.setdefaultencoding删除了此方法,其实你import sys只是指向了那个被删除了setdefaultencoding属性的sys模块地址,所以需要重新reload一下还原此方法


本文出自 “ζ自动化运维开发之路ζ” 博客,请务必保留此出处http://xmdevops.blog.51cto.com/11144840/1857444

以上是关于基础入门_Python-模块和包.setdefaultencoding前为何要reload(sys)?的主要内容,如果未能解决你的问题,请参考以下文章

Python基础入门学—单例异常模块和包

基础入门_Python-模块和包.深入Celery之应用配置/独立模块配置实践?

基础入门_Python-模块和包.setdefaultencoding前为何要reload(sys)?

基础入门_Python-模块和包.运维开发中__import__动态导入最佳实践?

基础入门_Python-模块和包.Gevent异步/状态获取/超时设置/猴子补丁?

基础入门_Python-模块和包.运维开发中内建模块getopt的最佳实践?