python - 通过键入创建 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)
´´´
解决方案
该typing
模块实现类型提示,如PEP 484中所定义。类型提示正是顾名思义……它们是“提示”。它们本身不会影响 Python 代码的执行。根据 PEP 484 文件:
虽然这些注解在运行时通过通常的 annotations属性可用,但在运行时不会进行类型检查。相反,该提案假设存在一个单独的离线类型检查器,用户可以自愿运行其源代码。本质上,这样的类型检查器充当了一个非常强大的 linter。
所以你需要一些额外的代码或工具来利用你添加到代码中的类型信息来预先告诉你你的代码违反了类型提示,或者在代码运行时告诉你。typing
模块本身不提供此功能。
我将您的代码放在我的 PyCharm IDE 中,IDE 将您传递给构造函数的字符串参数标记为违反类型提示,并说明:“预期类型为 'int',而不是 'str'”。因此,PyCharm IDE 就是这样一种利用类型提示的工具。然而,PyCharm 非常乐意运行代码并且不会产生任何错误。
推荐阅读
- javascript - chrome.storage.sync.set a key in object in Javascript
- api - 哪种技术提供 Instagram 个人资料照片缩放功能?
- docker - 错误“无法使用前端 dockerfile.v0 解决”
- python - 如何从时区字符串列中获取时区字符串?
- python - 基于另一列的子组向 Pandas 数据框添加新列的有效方法
- typescript - NX 是否可以自定义新的应用程序文件夹结构?
- javascript - 将字段添加到 Javascript/PHP 表单 WORDPRESS
- r - R中的桑基图标签
- ios - 当 NEPacketTunnelProvider 处于活动状态时,信号无法完全工作
- powershell - MS Teams - Powershell / 脚本 - Get-CsOnlineUser cmdlet 提供错误的输出 / PBX-Telephony