Aus*_*uss 17 python typing mypy
我很难找到满足的返回类型mypy。我有两个功能。第一个返回一个Union类型,因为该类型取决于赋予函数的参数。第二个函数使用默认参数调用第一个函数。因此,该类型不是一种Union类型——它可以缩小到Union.
让我给你举一个我的问题的一个非常简单的例子:
from typing import Union
def first(as_string: bool) -> Union[str, int]:
if as_string:
return "42"
else:
return 42
def second(as_string: bool) -> str:
return first(True)
Run Code Online (Sandbox Code Playgroud)
这会导致错误:
Incompatible return value type (got "str", expected "Union[str, int]")
Run Code Online (Sandbox Code Playgroud)
如何mypy在仍然使用类型提示的同时防止抛出错误?
如果您想建议拆分第一个函数,请记住这只是一个简化。我的(第一个)函数接收一个函数(sklearn.metricsfunction)并且大多数时候会返回一个标量。仅当应用混淆矩阵时,类型才会发生变化。第一个函数进行一些预处理,然后应用度量。我只是想为混淆矩阵提供一个不同名称的函数,因为我认为它是度量的特殊情况。
Bro*_*ark 13
mypy无法推断参数类型和返回值类型之间的关系。
您有两个选择:
使用 anassert确保类型正确:
def second(as_string) -> str:
ret = first(True)
assert isinstance(ret, str)
return ret
Run Code Online (Sandbox Code Playgroud)
您可以使用typing.cast断言类型检查器而不改变运行时行为(即不引入AssertionError引发的可能性)。
from typing import cast
def second(as_string) -> str:
return cast(str, first(True))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5890 次 |
| 最近记录: |