IntelliJ-IDEA的Python类型检查器 - 错误的预期类型?

时间:2015-04-28 15:26:25

标签: python intellij-idea

在以下代码中:

from typing import List
def test() -> List[str]:
    ret = ["Hi", "Hi"]
    return ret

我在功能定义行上收到以下警告:

Expected type 'Integral", got 'str' instead

我无法理解为什么IntelliJ-IDEA的python模块会将这个简单函数解释为返回Integral而不是str的列表。这是一个类型检查错误吗?

2 个答案:

答案 0 :(得分:1)

Pycharm只对类型提示有一些初步支持。

答案 1 :(得分:0)

请注意,typing.List是一个简单的包装类,扩展内置list类。它有助于类型提示,并且不允许使用自己创建new列表。

以下是typing.List的当前代码:

class List(list, MutableSequence[T], extra=list):

    __slots__ = ()

    def __new__(cls, *args, **kwds):
        if _geqv(cls, List):
            raise TypeError("Type List cannot be instantiated; "
                            "use list() instead")
        return _generic_new(list, cls, *args, **kwds)

通过执行typing.List[str],您尝试在对象__getitem__(这是一种类型)上调用方法typing.List。另请注意

这转化为以下内容:

typing.List.__getitem__(str)
# or
list.__getitem__(str)

现在,如果您看到列表索引方法所期望的内容,它需要一个像a[0], a[1]这样的整数。在这种情况下,它不是像int 0, 1那样,而是收到 类型 str

希望这能让您更全面地了解typing.List