我正在尝试导入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
我该如何解决?
答案 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