简而言之,我有一个返回 int 或 float 的函数。然后调用者函数检查第一个函数的返回类型,如果是 float,则返回 -1,否则返回原始值,因为它必须是 int。
# pseudo code for the aforementioned
def f1(*args, **kwargs) -> int | float: ...
def f2(*args, **kwargs) -> int:
ans = f1(...)
if type(ans) == float:
return -1
return ans # the idea here is that if f1 does not return float, it must return an int which is a valid return for f2
我的静态检查器失败并出现以下错误
Expression of type "int | float" cannot be assigned to return type "int"
Type "int | float" cannot be assigned to type "int"
"float" is incompatible with "int"
错误信息非常简单,f1 返回 int 或 float,因为 f2 期望返回 int,所以不能直接返回 f1 的结果。然而,(理想情况下)我的 if 语句可以防止 f1 结果为浮点数的可能性。
有谁知道更好的方法来注释以下内容。我目前正在使用 type:ignore 标志,但我希望不使用此解决方法。
您需要与
isinstance
核实:
def f1(*args, **kwargs) -> int | float: ...
def f2(*args, **kwargs) -> int:
ans = f1(...)
if isinstance(ans, float):
return -1
# now the typechecker can infer the type of 'ans' as int
return ans
更多信息参见 Mypy 文档
您可以使用类型转换来向类型检查器断言该值确实属于特定类型:
import typing
def f1(*args, **kwargs) -> int | float: ...
def f2(*args, **kwargs) -> int:
ans = f1(...)
if type(ans) == float:
return -1
return typing.cast(int, ans)