mypy 在评估算术计算类型时不考虑之前执行的类型检查

2024-02-01

我有一个 python 类,如下所示:

from typing import Optional, Union, Dict
import numpy as np

class TestClass():

    def __init__(self, a: Optional[float] = None, b: Optional[float] = None):
        self.a = 1 if a is None else a
        self.b = b

    @property
    def input_values(self) -> Dict[str, Union[float, None]]:
        return {'a': self.a, 'b': self.b}

    @property
    def test_property(self) -> float:
        if None in self.input_values.values():
            raise KeyError('missing values')

        return self.a+self.b

使用 mypy 对其进行评估会返回错误语句

error: Unsupported operand types for + ("float" and "None")
note: Right operand is of type "Optional[float]"

但我确保在控制流的这一点上两个值都不能为 None 。 mypy 是否可以通过不同的方式来执行这些类型检查?


mypy 中类型的缩小非常有限,允许的方法之一是断言,这在 mypy 中有效:

def test_property(self) -> float:
    if None in self.input_values.values():
        raise KeyError('missing values')
    assert isinstance(self.a, float) and isinstance(self.b, float)
    return self.a + self.b
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

mypy 在评估算术计算类型时不考虑之前执行的类型检查 的相关文章

随机推荐