1. 程式人生 > >reload(sys)後print失效問題解決

reload(sys)後print失效問題解決

保存 fault article efault 題解 customize unicode net python編碼

python版本: python2.7.6

#查看python默認編碼格式

>>> import sys
>>> print sys.getdefaultencoding() #python 2.x 默認編碼是ascii格式; python 3.x 默認編碼是utf-8格式
ascii

#設置python默認的編碼格式

>>> import sys
>>> print sys.setdefaultencoding(utf-8)

操作如下:

>>> import sys
>>> sys.getdefaultencoding()
ascii >>> reload(sys) >>> sys.setdefaultencoding(utf-8) >>> tmp = (中國,英國) >>> tmp >>> print tmp >>>

如上面的操作所示:設置python編碼格式後,print失效了,沒有任何輸出。

解決方法1: 在python代碼中進行改變

import sys 
reload(sys) 
sys.setdefaultencoding(utf-8) 
#註意:使用此方式,有極大的可能導致print函數無法打印數據!
#改進方式如下: import sys #這裏只是一個對sys的引用,只能reload才能進行重新加載 stdi,stdo,stde=sys.stdin,sys.stdout,sys.stderr reload(sys) #通過import引用進來時,setdefaultencoding函數在被系統調用後被刪除了,所以必須reload一次 sys.stdin,sys.stdout,sys.stderr=stdi,stdo,stde sys.setdefaultencoding(utf-8)

說明:手動執行了reload(sys)以後,sys模塊的這三個變量將會被重置,導致輸出無法顯示在IDLE。
所以解決方案很簡單,只需要在reload之前把這三個變量都復制一份,reload之後再恢復回來就行了:

解決方法2:python安裝目錄下的lib\site-packages文件夾下新建一個sitecustomize.py。 #推薦此方法

import sys 
sys.setdefaultencoding(utf-8)

這樣在python文件中就不用在import模塊後添加
reload(sys)
sys.setdefaultencoding(‘utf8‘)
這兩句話了,也不用擔心print失效的問題


參考資料:
python 保存文件UnicodeEncodeError以及reload(sys)後print失效問題: http://blog.csdn.net/u012340798/article/details/49230379
python 中的setdefaultencoding函數使用: http://blog.csdn.net/zhengalen/article/details/51221199
Python IDLE reload(sys)後print無法正常執行命令的原因: http://blog.csdn.net/chaoshengmingyue/article/details/51834468
Python 設置系統默認編碼: http://blog.csdn.net/intel80586/article/details/8566057

reload(sys)後print失效問題解決