导入队列时,lint和mypy错误

时间:2018-07-04 19:34:11

标签: python mypy

我正在尝试导入queue这样的东西

import sys
is_py2 = sys.version[0] == '2'
if is_py2:
    import Queue as queue
else:
    import queue as queue

但是皮棉抱怨说

Unnecessary import alias - rewrite as 'import queue'

mypy抱怨说

Name 'queue' already defined

我该如何解决?

2 个答案:

答案 0 :(得分:1)

您应该将代码修改为如下形式:

import sys
if sys.version_info < (3, 0):
    import Queue as queue
else:
    import queue as queue

...或者,保持您的代码不变,然后运行:

# Type-check your code assuming it will be run using python 3
mypy your_code.py --always-false py_2

# Type-check your code assuming it will be run using python 2
mypy your_code.py --always-true py_3 --py2

结果是mypy理解非常基本的"platform checks",包括使用sys.version_info的if语句。 (不过,Mypy无法使用sys.version来理解代码。)

Mypy也不会检查它知道不可达的任何分支。这两个功能的结合将使mypy只能加载两个模块之一。

也就是说,如果您决定使用sys.version_info检查,则必须在各处重复执行该检查,而不是使用常量:对于mypy来说,跟踪某些与常量相关联的额外元数据非常棘手,除非某些情况情况有限,因此不会打扰。

值得庆幸的是,mypy确实提供了一种机制,可让您告诉mypy假设特定常数始终为true或false---always-false CONST--always-true CONST标志。

答案 1 :(得分:0)

为什么不在Python中使用“更好地寻求宽恕”设计规则,并这样做:

try:
    import queue
except ImportError:
    import Queue as queue