看來,使用兩個不同的進口實體PYTHONPATH
s是而不是相同的對象。從兩條不同路徑導入的類是不相等的?
我在我的代碼中遇到了一個小問題,我想用一個小測試用例來解釋它。
我創建的源代碼樹:
a/
__init__.py
b/
__init__.py
example.py
在example.py:
class Example:
pass
,並從文件夾a
的父母,我運行Python和這個測試:
>>> import sys
>>> sys.path.append("/home/marco/temp/a")
>>>
>>> import a.b.example as example1
>>> import b.example as example2
>>>
>>> example1.Example is example2.Example
False
所以問題是:爲什麼結果是False
?即使通過兩條不同路徑導入,類也是一樣的。如果這個類是一個自定義的異常,並且你試圖用except
來捕捉它,這是一個完全的混亂。
測試用蟒3.4.3
'當你導入一個模塊時,Python會檢查sys.modules,看看在指定路徑上的模塊是否已經存在。問題是真正的模塊路徑確實是一樣的,它的'PYTHONPATH'不同。由於我使用python3不允許輸入''',我認爲真正的路徑可以而且應該被檢查。 –
不是文件路徑,模塊路徑,即此處爲'a.b.example'或'b.example'的模塊的名稱。兩個不同的名稱,兩個不同的模塊。 – Duncan