我在命名元组上遵循此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]
答案 0 :(得分:1)
python本身不会评估python中的类型提示!参见PEP484
尽管这些注释可以在运行时通过常规的 annotations 属性使用,但在运行时不会进行类型检查。相反,该提案假设存在一个单独的脱机类型检查器,用户可以自愿在其源代码上运行它。
至少有两个提供脱机类型检查的项目(mypy和pyre)。如果您在项目中使用类型提示,则绝对应该使用它们。
如果要在运行应用程序时验证输入,则必须通过自己验证数据来说服脱机类型检查器,或者使用第三方库。我知道attrs,您可以在其中使用validators或type annotations进行在线验证。