最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2020年04月25日 08:56:37   作者:碧水幽幽泉  
這篇文章主要介紹了解決reload(sys)后print失效的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

python版本: python2.7.6

#查看python默認(rèn)編碼格式

>>> import sys
>>> print sys.getdefaultencoding() #python 2.x 默認(rèn)編碼是ascii格式; python 3.x 默認(rèn)編碼是utf-8格式
ascii
#設(shè)置python默認(rèn)的編碼格式

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

操作如下:

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

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

解決方法1: 在python代碼中進(jìn)行改變

import sys 
reload(sys) 
sys.setdefaultencoding('utf-8') 
#注意:使用此方式,有極大的可能導(dǎo)致print函數(shù)無法打印數(shù)據(jù)!

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

說明:手動執(zhí)行了reload(sys)以后,sys模塊的這三個變量將會被重置,導(dǎo)致輸出無法顯示在IDLE。

所以解決方案很簡單,只需要在reload之前把這三個變量都復(fù)制一份,reload之后再恢復(fù)回來就行了:

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

import sys
sys.setdefaultencoding('utf-8')

這樣在python文件中就不用在import模塊后添加

reload(sys)
sys.setdefaultencoding('utf8')

這兩句話了,也不用擔(dān)心print失效的問題

補充知識:Python IDLE reload(sys)后print無法正常執(zhí)行命令的原因

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

起初遇到這個問題也是束手無策,后來無意間在stackoverflow上看到有人說到了這個問題。原來是因為IDLE作為一個GUI Shell環(huán)境,在啟動初始化過程中,會設(shè)置特定的標(biāo)準(zhǔn)輸入、標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔ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模塊的這三個變量將會被重置,導(dǎo)致輸出無法顯示在IDLE。所以解決方案很簡單,只需要在reload之前把這三個變量都復(fù)制一份,reload之后再恢復(fù)回來就行了:


>>> 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> 
>>>

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

>>> 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é)果!僅僅為了能夠重新設(shè)定Python的默認(rèn)編碼就執(zhí)行reload(sys)更是非常不明智的行為!

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

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

相關(guān)文章

  • Python偏函數(shù)Partial function使用方法實例詳解

    Python偏函數(shù)Partial function使用方法實例詳解

    這篇文章主要介紹了Python偏函數(shù)Partial function使用方法實例詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-06-06
  • 基于python實現(xiàn)圖片轉(zhuǎn)字符畫代碼實例

    基于python實現(xiàn)圖片轉(zhuǎn)字符畫代碼實例

    這篇文章主要介紹了基于python實現(xiàn)圖片轉(zhuǎn)字符畫代碼實例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-09-09
  • Python3.x+迅雷x 自動下載高分電影的實現(xiàn)方法

    Python3.x+迅雷x 自動下載高分電影的實現(xiàn)方法

    這篇文章主要介紹了Python3.x+迅雷x 自動下載高分電影的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-01-01
  • pytest配置文件pytest.ini的詳細(xì)使用

    pytest配置文件pytest.ini的詳細(xì)使用

    這篇文章主要介紹了pytest配置文件pytest.ini的詳細(xì)使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • Python基礎(chǔ)學(xué)習(xí)之類與實例基本用法與注意事項詳解

    Python基礎(chǔ)學(xué)習(xí)之類與實例基本用法與注意事項詳解

    這篇文章主要介紹了Python基礎(chǔ)學(xué)習(xí)之類與實例基本用法與注意事項,結(jié)合實例形式詳細(xì)分析了Python面相對象程序設(shè)計中關(guān)于類的定義與實例化對象相關(guān)操作技巧與注意事項,需要的朋友可以參考下
    2019-06-06
  • Python 隱藏輸入密碼時屏幕回顯的實例

    Python 隱藏輸入密碼時屏幕回顯的實例

    今天小編就為大家分享一篇Python 隱藏輸入密碼時屏幕回顯的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-02-02
  • python中MySQLdb模塊用法實例

    python中MySQLdb模塊用法實例

    這篇文章主要介紹了python中MySQLdb模塊用法,以實例形式詳細(xì)講述了MySQLdb模塊針對MySQL數(shù)據(jù)庫的各種常見操作方法,非常具有實用價值,需要的朋友可以參考下
    2014-11-11
  • python實現(xiàn)從字符串中找出字符1的位置以及個數(shù)的方法

    python實現(xiàn)從字符串中找出字符1的位置以及個數(shù)的方法

    這篇文章主要介紹了python實現(xiàn)從字符串中找出字符1的位置以及個數(shù)的方法,對于Python字符串操作的學(xué)習(xí)有一定的幫助與借鑒作用,需要的朋友可以參考下
    2014-08-08
  • python中列表的常見操作梳理總結(jié)(一)

    python中列表的常見操作梳理總結(jié)(一)

    這篇文章主要介紹了python中列表的常見操作梳理總結(jié),文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-07-07
  • Springboo如何t動態(tài)修改配置文件屬性

    Springboo如何t動態(tài)修改配置文件屬性

    這篇文章主要介紹了Springboo如何t動態(tài)修改配置文件屬性問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-09-09

最新評論

黔东| 五大连池市| 正蓝旗| 台北市| 沁阳市| 镇坪县| 施甸县| 应城市| 临洮县| 左权县| 博湖县| 绥江县| 启东市| 石城县| 西乌珠穆沁旗| 呼和浩特市| 廊坊市| 永和县| 手游| 兰考县| 旌德县| 泾源县| 通海县| 盐源县| 巴南区| 罗田县| 九寨沟县| 景德镇市| 彭山县| 江口县| 肃宁县| 凌云县| 延庆县| 永泰县| 宜兰市| 会同县| 西华县| 阿合奇县| 剑川县| 且末县| 都兰县|