sys.setdefaultencoding 引发 [Bad file descriptor]解决
2014-08-14 12:09
369 查看
为了彻底解决python转码的问题,我们可能需要在程序启动的时候加上下面两句:
reload(sys)
sys.setdefaultencoding("utf-8")
但是如果我们以这样的方式来启动:
python test.py >> test.log
那么会看到这样的错误:
IOError: [Errno 9] Bad file descriptor: '<fdopen>'
究其原因 是 reload(sys)导致,因为这个函数会重置 sys.stdout
【如何解决】
a = sys.stdout
reload(sys)
sys.setdefaultencoding("utf-8")
也就是只要我们在reload方法之前引用一下sys.stdout就可以了,很神奇吧,说明python的reload会检查sys下面的变量的引用计数。
reload(sys)
sys.setdefaultencoding("utf-8")
但是如果我们以这样的方式来启动:
python test.py >> test.log
那么会看到这样的错误:
IOError: [Errno 9] Bad file descriptor: '<fdopen>'
究其原因 是 reload(sys)导致,因为这个函数会重置 sys.stdout
【如何解决】
a = sys.stdout
reload(sys)
sys.setdefaultencoding("utf-8")
也就是只要我们在reload方法之前引用一下sys.stdout就可以了,很神奇吧,说明python的reload会检查sys下面的变量的引用计数。
相关文章推荐
- python reload sys 后才能setdefaultencoding 的原因
- 基础入门_Python-模块和包.setdefaultencoding前为何要reload(sys)?
- Python - reload(sys) + sys.setdefaultencoding
- 为什么有时候必须添加sys.setdefaultencoding('utf-8')
- python中sys.setdefaultencoding('utf-8')的作用
- 为什么在sys.setdefaultencoding之前要写reload(sys)
- Python问题分析:AttributeError: module 'sys' has no attribute 'setdefaultencoding'
- python3,使用sys.setdefaultencoding('utf-8'),编译时报错
- 为什么有时候必须添加sys.setdefaultencoding('utf-8')
- sys.setdefaultencoding()使用前,必须reload(sys)
- 为什么在sys.setdefaultencoding之前要写reload(sys)
- python错误:AttributeError: 'module' object has no attribute 'setdefaultencoding'问题的解决方法
- import sys reload(sys) sys.setdefaultencoding("utf-8")
- 为什么在sys.setdefaultencoding之前要写reload(sys)
- Python3异常-AttributeError: module 'sys' has no attribute 'setdefaultencoding'
- 为什么在sys.setdefaultencoding之前要写reload(sys)
- 为什么有时候必须添加sys.setdefaultencoding('utf-8')
- AttributeError: module 'sys' has no attribute 'setdefaultencoding'
- python错误:AttributeError: 'module' object has no attribute 'setdefaultencoding'问题的解决方法
- Warning - bad CRC, using default environment问题解决