2013-02-20 35 views
6

我對工作的Python 2.6/2.7的代碼,包含以下內容:Python:如果導入成功,可以__file__爲無?

try: 
    import gmpy 
    gmpy_imported=True 
except ImportError: 
    gmpy_imported=False 

if gmpy_imported and gmpy.__file__ is None: 
    gmpy_imported=False 

我能理解try-except部分,它是用來查看是否gmpy已經安裝在系統上 - 如果沒有,要做任何事情。但是,我不明白爲什麼if gmpy.__file__ is None檢查是必要的;它似乎是多餘的。

有沒有任何情況下導入一個包似乎成功了,但是包的路徑實際上是空的?這是否仔細檢查防止損壞的安裝失敗?

+0

如果這是Python 3.2+,與導入相關的代碼實際上足夠清晰,我們可以通過它來查看是否會發生這樣的事情。但我不認爲我想用舊代碼來嘗試... – abarnert 2013-02-20 00:57:28

+0

不是,它是Python 2.我應該在問題中澄清這一點... – Boris 2013-02-20 21:40:11

回答

2

這張支票沒有意義。如果模塊/軟件包已被成功導入,__file__永遠不會是none,它將是模塊的路徑。

+0

這就是我的想法,我也會......但是,花點時間在這個問題上,因爲我想知道更多。 – Boris 2013-02-20 21:54:35

2

文檔說「對於靜態鏈接到解釋器的C模塊,__file__屬性不存在」,所以我認爲這是多餘的。除此之外,模塊對象在那裏會有什麼不同。

+1

「不存在」與「無」不一樣。 – interjay 2013-02-20 00:29:22

+0

@interjay:對。鑑於此,文檔沒有定義它將出現在哪裏並設置爲「無」 - 這促使我聲稱這是多餘的。 – martineau 2013-02-20 00:35:46

+0

+1。但是,如果文檔似乎認爲這絕不應該發生,但有人編寫了代碼......我們如何知道它並非如此,例如「根據OP提出的建議」對安裝受損的安裝進行故障安全檢查「 ,但是沒有閱讀導入代碼(或者試圖提出一個測試套件,或者根據我們所知的編寫OP代碼的人的知識猜測,或者......)? – abarnert 2013-02-20 00:53:11

相關問題