![](/img/trans.png)
[英]os.path AttributeError: 'str' object has no attribute 'exists'
[英]Python - os.path doesn't exist: AttributeError: 'module' object has no attribute 'path'
調查一下我開始用gdb-python突然得到的一個奇怪的錯誤,我把它減少到這個:
C:\Users\User>python -i
Python 2.7.3 (default, Apr 10 2012, 23:31:26) [MSC v.1500 32 bit (Intel)] on win 32
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> dir(os.path)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'module' object has no attribute 'path'
>>> dir(os)
['__builtins__', '__doc__', '__file__', '__name__', '__package__']
通過查看其他'module' object has no attribute
答案,最常見的建議是sys.path
必須存在另一個流氓os.py
,並且它已經被加載,而不是內置的。 但我檢查了PYTHONPATH
環境變量,並在當前目錄中,並沒有任何其他os.py
因此,我找到了一種方法來查找定義實體的文件的名稱,並且毫不奇怪,Python以inspect
模塊的形式具有這樣的功能 。
>>> inspect.getsourcelines(os)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Programs\Python273\lib\inspect.py", line 690, in getsourcelines
lines, lnum = findsource(object)
File "C:\Programs\Python273\lib\inspect.py", line 527, in findsource
sourcefile = getsourcefile(object)
File "C:\Programs\Python273\lib\inspect.py", line 451, in getsourcefile
if os.path.exists(filename):
AttributeError: 'module' object has no attribute 'path'
因此, inspect
依賴於os.path
,然后我沒有想法。
我最近沒有安裝任何新東西。 唯一發生的事情是我必須做的強制關機,這可能與運行Python腳本同時發生,因為當機器無響應並且發生強制關機時,我在循環中反復運行一個簡短的Python腳本。
在浪費了很多時間后,我想通了。 在C:\\Programs\\Python273\\Lib
下C:\\Programs\\Python273\\Lib
,我注意到os.pyc
大小比os.py
和os.pyo
,而對於其他模塊, abc.pyc
大小與abc.pyo
相同小於abc.py
在os.pyc
里面os.pyc
,它只包含:
^Có \{GOc^@^@^@^@^@^@^@^@^A^@^@^@@^@^@^@s^D^@^@^@d^@^@S( ^A^@^@^@N(^@^@^@^@(^@^@^@^@(^@^@^@^@(^@^@^@^@s^_^@^@ ^@C:\Programs\Python273\lib\os.pyt^H^@^@^@<module>^A ^@^@^@s^@^@^@^@
(這是它在Vim中的顯示方式。)(注意: os.pyt
末尾的t
不是文件名的一部分。)
刪除此文件(以及具有相同故事的其他兩個.pyc
文件)解決了該問題。
所以發生了什么必須是python
因為某些原因將os
重新編譯到os.pyc
(為什么?如果它之前已經編譯過?)並且輸出了文件的第一部分(它本身作為文件有效),然后強制在有機會輸出其余部分之前發生了關機。 因此,這是操作不是原子的時候發生的令人沮喪的問題的一個例子。
而且,事實證明我可以更快地跟蹤它,因為這樣做
>>> inspect.getfile(os)
'C:\\Programs\\Python273\\lib\\os.pyc'
當os.path
不可用時仍然有效。
我有同樣的問題,C:\\ Python27 \\ Lib \\ os.py根本沒有readlink()函數。 搜索了Lib並找到了它使用的6個步驟,但沒有定義:
在Win32上的Python 2.7(r27:82525,2010年7月4日,09:01:59)[MSC v.1500 32位(英特爾)]
C:\Python27\Lib\pdb.py(1194): dirname = os.readlink(dirname)
C:\Python27\Lib\platform.py(952): os.path.join(os.path.dirname(filepath),os.readlink(filepath)))
C:\Python27\Lib\posixpath.py(386): resolved = os.readlink(path)
C:\Python27\Lib\rexec.py(146): ok_posix_names = ('error', 'fstat', 'listdir', 'lstat', 'readlink',
C:\Python27\Lib\shutil.py(183): linkto = os.readlink(srcname)
C:\Python27\Lib\tarfile.py(1873): linkname = os.readlink(name)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.