python中的setdefaulten

http://blog.csdn.net/magicharvey/article/details/20055949

主題 Python

#!/usr/bin/env python  #encoding: utf-8  import sys   #引用sys模組進來,並不是進行sys的第一次載入  reload(sys)  #重新載入sys  sys.setdefaultencoding('utf8')  ##調用setdefaultencoding函數

可以正確的執行,可是下面的程式碼會出錯

#!/usr/bin/env python  #encoding: utf-8  import sys  sys.setdefaultencoding('utf8')

要在調用setdefaultencoding時必須要先reload一次sys模組,因為這裡的import語句其實並不是sys的第一次導入語句,也就是說這裡其實可能是第二、三次進行sys模組的import,這裡只是一個對sys的引用,只能reload才能進行重新載入。

那麼為什麼要重新載入,而直接引用過來則不能調用該函數呢?因為setdefaultencoding函數在被系統調用後被刪除了,所以通過import引用進來時其實已經沒有了,所以必須reload一次sys模組,這樣setdefaultencoding才會為可用,才能在程式碼里修改解釋器當前的字元編碼。

在python安裝目錄的Lib文件夾下,有一個叫site.py的文件,在裡面可以找到main() –> setencoding()–>sys.setdefaultencoding(encoding),因為這個site.py每次啟動python解釋器時會自動載入,所以main函數每次都會被執行,setdefaultencoding函數一出來就已經被刪除了。