簡體   English   中英

Python - os.path不存在:AttributeError:'module'對象沒有屬性'path'

[英]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\\LibC:\\Programs\\Python273\\Lib ,我注意到os.pyc大小比os.pyos.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM