簡體   English   中英

PyCharm中錯誤的未使用的導入語句?

[英]False Unused Import Statement in PyCharm?

鑒於這種情況:

b.py:

import A
# A is unused here

c.py:

from b import A
# A is used here

PyCharm在b.py中抱怨“import A”是一個未使用的導入,Optimize導入會刪除它,打破c.py中的導入

我知道這些鏈式導入不是一個好習慣(雖然你可以用它來實現一個Facade模塊),但是我或者是PyCharm失敗了嗎?

您實際上可以使用PyUnresolvedReferences標記來取消對import語句的檢查:

# noinspection PyUnresolvedReferences
import A

參考: PyCharm bug PY-2240

據我所知,這種行為作為檢查或其他可配置選項處理,這意味着在導入之前不存在可以放置的#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安全的最佳實踐,所以你應該已經做了。

from C import A, B
assert A is not None and B is not None
# or:
_ = (A, B); del _

適合我。 我不喜歡

# noinspection PyUnresolvedReferences

因為如果無法導入A,它會給出假陰性。

__all__ = ['A', 'B', ...]

是神秘的,不便於重構。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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