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

Mih*_*ian 49 python ide pycharm

鉴于这种情况:

b.py:

import A
# A is unused here
Run Code Online (Sandbox Code Playgroud)

c.py:

from b import A
# A is used here
Run Code Online (Sandbox Code Playgroud)

PyCharm在b.py中抱怨"import A"是一个未使用的导入,Optimize导入会删除它,打破c.py中的导入

我知道这些链式导入不是一个好习惯(虽然你可以用它来实现一个Facade模块),但是我或者是PyCharm失败了吗?

ben*_*lme 88

您实际上可以使用PyUnresolvedReferences标记来取消对import语句的检查:

# noinspection PyUnresolvedReferences
import A
Run Code Online (Sandbox Code Playgroud)

参考:PyCharm bug PY-2240

  • 这解决了我的问题!您的答案帮助我找到了包含所有标记的综合列表,网址为:http://codeoptimism.com/blog/pycharm-suppress-inspections-list/ (4认同)

Bak*_*riu 16

据我所知,这种行为作为检查或其他可配置选项处理,这意味着#noinspection UnusedImport在导入之前没有(或等效的)可以放置.

如果您不想在使用这些变量的地方定义一个未使用的块,那么可以使用另一种简单且可能更好的方法来实现您想要的:

#b.py code
import A

# [...] your code


__all__ = ['A', ...]  # *all* the names you want to export
Run Code Online (Sandbox Code Playgroud)

PyCharm非常聪明,可以查看__all__并避免删除A未使用的导入.但是,有一个限制__all__必须是一个简单的列表文字.你做不到这样的事情:

__all__ = ['A'] + [name for name in iterable if condition(name)]
Run Code Online (Sandbox Code Playgroud)

甚至不:

x = 'b'
__all__ = ['A', x]
Run Code Online (Sandbox Code Playgroud)

定义__all__是使模块*-import安全的最佳实践,所以你应该已经做了.