亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

 更新時間:2020年04月25日 08:56:37   作者:碧水幽幽泉  
這篇文章主要介紹了解決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函數(shù)無法打印數(shù)據(jù)!

#改進方式如下:
import sys #這里只是一個對sys的引用,只能reload才能進行重新加載
stdi,stdo,stde=sys.stdin,sys.stdout,sys.stderr 
reload(sys) #通過import引用進來時,setdefaultencoding函數(shù)在被系統(tǒng)調(diào)用后被刪除了,所以必須reload一次
sys.stdin,sys.stdout,sys.stderr=stdi,stdo,stde 
sys.setdefaultencoding('utf-8')

說明:手動執(zhí)行了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 IDLE reload(sys)后print無法正常執(zhí)行命令的原因

通常大多數(shù)人執(zhí)行reload(sys)這條語句其實僅僅是為了能夠修改Python的默認字符集,也就是能夠調(diào)用sys.setdefaultencoding()。但是如果在IDLE中執(zhí)行reload(sys),就會導致接下來無法正常執(zhí)行任何命令。

起初遇到這個問題也是束手無策,后來無意間在stackoverflow上看到有人說到了這個問題。原來是因為IDLE作為一個GUI Shell環(huán)境,在啟動初始化過程中,會設置特定的標準輸入、標準輸出和標準錯誤輸出,使得輸入和輸出都在IDLE的GUI Shell中,可以在IDLE中通過如下方式查看:

>>> import sys 
>>> print sys.stdin 
<idlelib.PyShell.PseudoInputFile object at 0x00000000027AF2E8> 
>>> print sys.stdout 
<idlelib.PyShell.PseudoOutputFile object at 0x00000000027AF320> 
>>> print sys.stderr 
<idlelib.PyShell.PseudoOutputFile object at 0x00000000027AF358> 
>>>  

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


>>> stdi,stdo,stde=sys.stdin,sys.stdout,sys.stderr 
>>> reload(sys) 
>>> sys.stdin,sys.stdout,sys.stderr=stdi,stdo,stde 
>>> print sys.stdout 
<idlelib.PyShell.PseudoOutputFile object at 0x00000000027AF320> 
>>>

細心的人可能會想到,reload(sys)之后,如果標準輸入、標準輸出和標準錯誤輸出都不起作用了,那么relaod(sys)后面那一句sys.stdin,sys.stdout,sys.stderr=stdi,stdo,stde怎么能夠執(zhí)行呢?所以其實reload(sys)之后、恢復之前,標準輸入還是可以正常工作的,可以通過如下代碼來檢驗:

>>> reload(sys) 
>>> sys.stdout=stdo 
>>> print sys.stdin 
<open file '<stdin>', mode 'r' at 0x0000000001CAB030> 
>>> print sys.stdout 
<idlelib.PyShell.PseudoOutputFile object at 0x00000000027AF320> 
>>> print sys.stderr 
<open file '<stderr>', mode 'w' at 0x0000000001CAB150> 
>>>  

所以問題就解決了,但是必須要強調(diào):

千萬不要輕易使用reload(sys),除非你完全清除這么做帶來的結(jié)果!僅僅為了能夠重新設定Python的默認編碼就執(zhí)行reload(sys)更是非常不明智的行為!

Python的設計者故意在Python初始化完成以后刪除sys模塊里面的setdefaultencoding()方法,就是為了不讓在運行時隨意更改Python默認編碼,以免出現(xiàn)一些未知的問題。事實上,關于編碼問題,完全有別的更可靠的方法解決。

以上這篇解決reload(sys)后print失效的問題就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • Python線性擬合實現(xiàn)函數(shù)與用法示例

    Python線性擬合實現(xiàn)函數(shù)與用法示例

    這篇文章主要介紹了Python線性擬合實現(xiàn)函數(shù)與用法,結(jié)合實例形式分析了Python使用線性擬合算法與不使用線性擬合算法的相關算法操作技巧,需要的朋友可以參考下
    2018-12-12
  • Python的迭代器和生成器使用實例

    Python的迭代器和生成器使用實例

    這篇文章主要介紹了Python的迭代器和生成器使用實例,本文講解了迭代器的next方法、__iter__方法和實例以及生成器的代碼實例,需要的朋友可以參考下
    2015-01-01
  • Python經(jīng)驗總結(jié):兩種Type?Error問題

    Python經(jīng)驗總結(jié):兩種Type?Error問題

    這篇文章主要介紹了Python經(jīng)驗總結(jié):兩種Type?Error問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • 用Python 爬取貓眼電影數(shù)據(jù)分析《無名之輩》

    用Python 爬取貓眼電影數(shù)據(jù)分析《無名之輩》

    這篇文章主要介紹了用Python 爬取貓眼電影數(shù)據(jù)分析《無名之輩》,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-07-07
  • Python基于gevent實現(xiàn)文件字符串查找器

    Python基于gevent實現(xiàn)文件字符串查找器

    這篇文章主要介紹了Python基于gevent實現(xiàn)文件字符串查找器,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-08-08
  • python打印exception信息的方法

    python打印exception信息的方法

    這篇文章主要介紹了python打印exception信息的相關知識,本文給大家介紹的非常詳細,感興趣的朋友跟隨小編一起看看吧
    2024-05-05
  • 輕松掌握Python爬蟲,從入門到精通

    輕松掌握Python爬蟲,從入門到精通

    Python爬蟲學習完整版來了!想成為一名爬蟲高手,掌握數(shù)據(jù)采集的技能嗎?這份指南將帶你從零開始,一步步掌握Python爬蟲的各種技巧,讓你輕松獲取海量數(shù)據(jù),需要的朋友可以參考下
    2024-03-03
  • pytorch中的nn.ZeroPad2d()零填充函數(shù)實例詳解

    pytorch中的nn.ZeroPad2d()零填充函數(shù)實例詳解

    這篇文章主要介紹了pytorch中的nn.ZeroPad2d()零填充函數(shù)實例詳解,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-04-04
  • Pandas實現(xiàn)groupby分組統(tǒng)計的實踐

    Pandas實現(xiàn)groupby分組統(tǒng)計的實踐

    本文主要介紹了Pandas實現(xiàn)groupby分組統(tǒng)計的實踐,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • Django中常遇到的錯誤問題

    Django中常遇到的錯誤問題

    在Django開發(fā)中,設置DEBUG=False時需要配置ALLOWED_HOSTS以防止報錯,此外,如果django-admin.py命令找不到,需添加Django的安裝路徑到系統(tǒng)環(huán)境變量,此文還提供了一些常見Django錯誤的解決方法,如數(shù)據(jù)庫添加中文報錯、信號無法觸發(fā)等問題
    2024-09-09

最新評論