轉載自:http://blog.csdn.net/kxcfzyk/article/details/41414247?utm_source=tuicool&utm_medium=referralpython
一般大多數人執行reload(sys)這條語句其實僅僅是爲了可以修改Python的默認字符集,也就是可以調用sys.setdefaultencoding()。可是若是在IDLE中執行reload(sys),就會致使接下來沒法正常執行任何命令。ui
起初遇到這個問題也是一籌莫展,後來無心間在stackoverflow上看到有人說到了這個問題。原來是由於IDLE做爲一個GUI Shell環境,在啓動初始化過程當中,會設置特定的標準輸入、標準輸出和標準錯誤輸出,使得輸入和輸出都在IDLE的GUI Shell中,能夠在IDLE中經過以下方式查看:編碼
而若是手動執行了reload(sys)之後,sys模塊的這三個變量將會被重置,致使輸出沒法顯示在IDLE。因此解決方案很簡單,只須要在reload以前把這三個變量都複製一份,reload以後再恢復回來就好了:spa
細心的人可能會想到,reload(sys)以後,若是標準輸入、標準輸出和標準錯誤輸出都不起做用了,那麼relaod(sys)後面那一句sys.stdin,sys.stdout,sys.stderr=stdi,stdo,stde怎麼可以執行呢?因此其實reload(sys)以後、恢復以前,標準輸入仍是能夠正常工做的,能夠經過以下代碼來檢驗:.net
因此問題就解決了,可是必需要強調:設計
千萬不要輕易使用reload(sys),除非你徹底清除這麼作帶來的結果!僅僅爲了可以從新設定Python的默認編碼就執行reload(sys)更是很是不明智的行爲!blog
Python的設計者故意在Python初始化完成之後刪除sys模塊裏面的setdefaultencoding()方法,就是爲了避免讓在運行時隨意更改Python默認編碼,以避免出現一些未知的問題。事實上,關於編碼問題,徹底有別的更可靠的方法解決。get