首页 > 解决方案 > 通过键入创建 NamedTuple 时引发 TypeError

问题描述

如何使我的命名元组引发 TypeError 异常?

from typing import NamedTuple

class Foo(NamedTuple):

    bar : int     
    sla : str

但是,当我尝试使用无效类型创建命名元组的实例时,不会引发异常

test = Foo('not an int',3)

#i can even print it

print(test.bar)
´´´

标签: pythontypingnamedtuple

解决方案


typing模块实现类型提示,如PEP 484中所定义。类型提示正是顾名思义……它们是“提示”。它们本身不会影响 Python 代码的执行。根据 PEP 484 文件:

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

所以你需要一些额外的代码或工具来利用你添加到代码中的类型信息来预先告诉你你的代码违反了类型提示,或者在代码运行时告诉你。typing模块本身不提供此功能。

我将您的代码放在我的 PyCharm IDE 中,IDE 将您传递给构造函数的字符串参数标记为违反类型提示,并说明:“预期类型为 'int',而不是 'str'”。因此,PyCharm IDE 就是这样一种利用类型提示的工具。然而,PyCharm 非常乐意运行代码并且不会产生任何错误。


推荐阅读