代码之家  ›  专栏  ›  技术社区  ›  KubiK888

如何在python的命名tuple中强制变量类型?

  •  0
  • KubiK888  · 技术社区  · 6 年前

    我在跟踪这个 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 回复  |  直到 6 年前
        1
  •  1
  •   escaped    6 年前

    python中的类型提示不会由python本身计算!见 PEP484

    而这些注释在运行时通过 注解 属性,运行时不进行类型检查。相反,该建议假定存在一个单独的离线类型检查程序,用户可以自动运行其源代码。

    至少有两个项目提供脱机类型检查( mypy pyre )如果您在项目中使用类型提示,那么您一定要使用它们。

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

    推荐文章