1 回答

TA貢獻(xiàn)1786條經(jīng)驗(yàn) 獲得超11個(gè)贊
最近在編寫Python腳本過程中遇到一個(gè)問題比較奇怪:Python腳本完全正常沒問題,但執(zhí)行總報(bào)錯(cuò)"AttributeError: 'module' object has no attribute 'xxx'"。這其實(shí)是.pyc文件存在問題。
問題定位:
查看import庫的源文件,發(fā)現(xiàn)源文件存在且沒有錯(cuò)誤,同時(shí)存在源文件的.pyc文件
問題解決方法:
1. 命名py腳本時(shí),不要與python預(yù)留字,模塊名等相同
2. 刪除該庫的.pyc文件(因?yàn)閜y腳本每次運(yùn)行時(shí)均會(huì)生成.pyc文件;在已經(jīng)生成.pyc文件的情況下,若代碼不更新,運(yùn)行時(shí)依舊會(huì)走pyc,所以要?jiǎng)h除.pyc文件),重新運(yùn)行代碼;或者找一個(gè)可以運(yùn)行代碼的環(huán)境,拷貝替換當(dāng)前機(jī)器的.pyc文件即可
示例:
如下Python代碼,執(zhí)行時(shí)報(bào)錯(cuò)"AttributeError: 'module' object has no attribute 'urlopen'",更新Python27\Lib\urllib2.pyc文件后,即可正常運(yùn)行。
1234
import urllib2url = ""f = urllib2.urlopen(url, timeout=5).read()print len(f)
附錄:
pyc文件介紹
pyc文件,是python編譯后的字節(jié)碼(bytecode)文件。只要你運(yùn)行了py文件,python編譯器就會(huì)自動(dòng)生成一個(gè)對應(yīng)的pyc字節(jié)碼文件。這個(gè)pyc字節(jié)碼文件,經(jīng)過python解釋器,會(huì)生成機(jī)器碼運(yùn)行(這也是為什么pyc文件可以跨平臺(tái)部署,類似于java的跨平臺(tái),java中JVM運(yùn)行的字節(jié)碼文件)。下次調(diào)用直接調(diào)用pyc,而不調(diào)用py文件。直到你這個(gè)py文件有改變。python解釋器會(huì)檢查pyc文件中的生成時(shí)間,對比py文件的修改時(shí)間,如果py更新,那么就生成新的pyc。
添加回答
舉報(bào)