PyCharm中错误的未使用的导入语句?

时间:2014-01-15 13:55:36

标签: python ide 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失败?

3 个答案:

答案 0 :(得分:77)

您实际上可以使用PyUnresolvedReferences标记停用导入语句的检查:

# noinspection PyUnresolvedReferences
import A

参考:PyCharm bug PY-2240

答案 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', ...]

含糊不清,不方便重构。