最近在編寫Python指令碼過程中遇到一個問題比較奇怪:Python指令碼完全正常沒問題,但執行總報錯"AttributeError: "module" object has no attribute "xxx""。這其實是.pyc檔案存在問題。問題定位:檢視import庫的原始檔,發現原始檔存在且沒有錯誤,同時存在原始檔的.pyc檔案問題解決方法:1. 命名py指令碼時,不要與python預留字,模組名等相同2. 刪除該庫的.pyc檔案(因為py指令碼每次執行時均會生成.pyc檔案;在已經生成.pyc檔案的情況下,若程式碼不更新,執行時依舊會走pyc,所以要刪除.pyc檔案),重新執行程式碼;或者找一個可以執行程式碼的環境,複製替換當前機器的.pyc檔案即可示例:如下Python程式碼,執行時報錯"AttributeError: "module" object has no attribute "urlopen"",更新Python27\Lib\urllib2.pyc檔案後,即可正常執行。1234import urllib2url = ""f = urllib2.urlopen(url, timeout=5).read()print len(f)附錄:pyc檔案介紹pyc檔案,是python編譯後的位元組碼(bytecode)檔案。只要你運行了py檔案,python編譯器就會自動生成一個對應的pyc位元組碼檔案。這個pyc位元組碼檔案,經過python直譯器,會生成機器碼執行(這也是為什麼pyc檔案可以跨平臺部署,類似於java的跨平臺,java中JVM執行的位元組碼檔案)。下次呼叫直接呼叫pyc,而不呼叫py檔案。直到你這個py檔案有改變。python直譯器會檢查pyc檔案中的生成時間,對比py檔案的修改時間,如果py更新,那麼就生成新的pyc。
最近在編寫Python指令碼過程中遇到一個問題比較奇怪:Python指令碼完全正常沒問題,但執行總報錯"AttributeError: "module" object has no attribute "xxx""。這其實是.pyc檔案存在問題。問題定位:檢視import庫的原始檔,發現原始檔存在且沒有錯誤,同時存在原始檔的.pyc檔案問題解決方法:1. 命名py指令碼時,不要與python預留字,模組名等相同2. 刪除該庫的.pyc檔案(因為py指令碼每次執行時均會生成.pyc檔案;在已經生成.pyc檔案的情況下,若程式碼不更新,執行時依舊會走pyc,所以要刪除.pyc檔案),重新執行程式碼;或者找一個可以執行程式碼的環境,複製替換當前機器的.pyc檔案即可示例:如下Python程式碼,執行時報錯"AttributeError: "module" object has no attribute "urlopen"",更新Python27\Lib\urllib2.pyc檔案後,即可正常執行。1234import urllib2url = ""f = urllib2.urlopen(url, timeout=5).read()print len(f)附錄:pyc檔案介紹pyc檔案,是python編譯後的位元組碼(bytecode)檔案。只要你運行了py檔案,python編譯器就會自動生成一個對應的pyc位元組碼檔案。這個pyc位元組碼檔案,經過python直譯器,會生成機器碼執行(這也是為什麼pyc檔案可以跨平臺部署,類似於java的跨平臺,java中JVM執行的位元組碼檔案)。下次呼叫直接呼叫pyc,而不呼叫py檔案。直到你這個py檔案有改變。python直譯器會檢查pyc檔案中的生成時間,對比py檔案的修改時間,如果py更新,那麼就生成新的pyc。