首页 > 解决方案 > 如何在 Python 中的命名元组中强制变量类型?

问题描述

我正在关注本教程关于命名元组的变量类型规范。但是,我修改了代码(如下),即使我输入了错误类型的值,也没有出现错误消息或编程中断。我知道您可以编写自己的 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]

标签: python-3.xtypingnamedtuple

解决方案


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

虽然这些注解在运行时通过通常的annotations属性可用,但在运行时不会进行类型检查。相反,该提案假设存在一个单独的离线类型检查器,用户可以自愿运行其源代码。

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

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


推荐阅读