鉴于这种情况:
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失败?
答案 0 :(得分:77)
您实际上可以使用PyUnresolvedReferences
标记停用导入语句的检查:
# noinspection PyUnresolvedReferences
import A
答案 1 :(得分:13)
据我所知,这种行为不作为检查或其他一些可配置选项处理,这意味着没有#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__
是让模块*
- 导入安全的最佳做法,所以你应该做的事情也是如此。
答案 2 :(得分:0)
from C import A, B
_ = (A, B); del _
为我工作。我不喜欢
# noinspection PyUnresolvedReferences
,因为在无法导入A的情况下会产生假阴性。还有
__all__ = ['A', 'B', ...]
含糊不清,不方便重构。