2014-01-15 48 views
28

鑑於這種情況:錯誤PyCharm中未使用的導入語句?

b.py:

import A 
# A is unused here 

c.py:

from b import A 
# A is used here 

PyCharm抱怨在b.py說, 「導入」 是一個未使用的導入和優化進口刪除它,打破導入c.py

我知道這些鏈式導入不是一個好的做法(雖然你可能會用它來實現一個門面模塊),但它是我還是這是PyCharm失敗嗎?

+0

是你。如果你想要解決這個IDE行爲,只需在你使用這些變量的地方添加一個「if False:」塊,以便Optimize導入不會觸及它們。 – Bakuriu

+4

我正在處理大型項目中的現有代碼。另外,我不覺得爲IDE編寫代碼是一個好主意。這是噪音,尤其是使用其他工具的貢獻者。 –

+1

「失敗」有點苛刻,是一個小缺點,但沒有任何方法可以輕鬆獲得100%的正確行爲(您可以儘可能混淆使用A)。如果A在它不應該被移除的情況下被移除,這就是您的buildbot/jenkins /持續集成設置應該在閃存中提取的那種問題。 – wim

回答

9

據我所知,此行爲是而不是作爲檢查或其他可配置選項處理,這意味着沒有#noinspection UnusedImport(或等效)可以放置在導入之前。

如果你不想定義,你用這些變量有一個其他簡單的,也許更好的方式來實現你想要使用的功能塊:

#b.py code 
import A 

# [...] your code 


__all__ = ['A', ...] # *all* the names you want to export 

PyCharm是足夠聰明,看__all__和避免將A作爲未使用的導入。 但是有一個限制,__all__必須是一個簡單的列表文字。您不能做這樣的事情:

__all__ = ['A'] + [name for name in iterable if condition(name)] 

就連:

x = 'b' 
__all__ = ['A', x] 

定義__all__是一個最佳實踐,使您的模塊* -import安全無論如何,所以是你應該已經做一些事情。

+0

謝謝,我喜歡你的解決方案。 –

+0

完美答案謝謝! – TheWhiteLlama

51

實際上,你可以使用PyUnresolvedReferences標記停用檢查你的import語句:

# noinspection PyUnresolvedReferences 
import A 

參考:PyCharm bug PY-2240

+3

這解決了我的問題!你的回答幫我找到了一個包含所有標記的完整列表,在http://codeoptimism.com/blog/pycharm-suppress-inspections-list/ – kunambi