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


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM