【发布时间】:2018-12-20 13:28:12
【问题描述】:
这里是示例代码
from typing import Dict, Union, Tuple
def select_range(data: Dict[str, Union[str, int]]) -> Tuple[int, int]:
if data['start'] and data['end']:
return data['start'], data['end']
return 1, 1
select_range({})
Mypy 输出:
mypy different_return.py
different_return.py:6: error: Incompatible return value type (got
"Tuple[Union[str, int], Union[str, int]]", expected "Tuple[int, int]")
即使字典值之一是 int,mypy 也无法推断。
【问题讨论】:
-
mypy是正确的。您的字典值为Union[str, int],但签名中的返回类型为int。更改返回类型或不指定data中值的类型。 -
您的函数接受一个字典,其中的值可以是字符串或整数,并返回两个这样的值。 然后你不能声称你总是返回整数。
-
我认为您在这里的误解是这些类型是静态的,但您正在考虑您在运行时返回的实际具体值。这不是静态类型系统的工作方式。
标签: python mypy static-typing