如何在Python中的命名元组中强制执行变量键入?

时间:2018-12-04 23:11:20

标签: python-3.x typing namedtuple

我在命名元组上遵循此tutorial,并指定了变量类型。但是,我修改了下面的代码,即使我输入了错误类型的值,也没有出现错误信息或程序中断。我了解您可以编写自己的try / except引发错误异常,但是是否有一个易于使用的解决方案/语法来强制用户输入正确的变量类型。

from typing import NamedTuple

class Pet(NamedTuple):
    pet_name: str
    pet_type: str

    def __repr__(self):
        return f"{self.pet_name}, {self.pet_type}"

cleons_pet = Pet('Cotton', 'owl')
print('cleons_pet: ', cleons_pet)

cleons_pet_v2 = Pet(222, 1)
print('cleons_pet_v2: ', cleons_pet_v2)

# Output
cleons_pet:  Cotton, owl
cleons_pet_v2:  222, 1
[Finished in 0.1s]

1 个答案:

答案 0 :(得分:1)

python本身不会评估python中的类型提示!参见PEP484

  

尽管这些注释可以在运行时通过常规的 annotations 属性使用,但在运行时不会进行类型检查。相反,该提案假设存在一个单独的脱机类型检查器,用户可以自愿在其源代码上运行它。

至少有两个提供脱机类型检查的项目(mypypyre)。如果您在项目中使用类型提示,则绝对应该使用它们。

如果要在运行应用程序时验证输入,则必须通过自己验证数据来说服脱机类型检查器,或者使用第三方库。我知道attrs,您可以在其中使用validatorstype annotations进行在线验证。