【问题标题】:python type hinting not generating error for wrong typepython类型提示不会为错误类型生成错误
【发布时间】:2021-07-28 10:06:36
【问题描述】:

我最近在检查类型提示,在阅读了一些理论之后,我尝试了一个简单的示例,如下所示

def myfun(num1: int, num2: int) -> int:
    return str(num1) + num2


a = myfun(1,'abc')
print(a)
# output -> 1abc

在这里您可以看到我已经定义了 int 类型的 num1num2,即使在将 num2 值作为字符串传递之后,它也不会产生任何错误。

该函数还应该返回 int 类型值,但它不会抱怨返回字符串类型值。

有人能解释一下这里出了什么问题吗?

【问题讨论】:

  • Python 不检查任何类型注释。如果您只是正常运行文件,则提示仅供读者使用(您也可以在代码中访问类型提示,例如使用typing.get_type_hints)。要真正使用类型提示,请使用像 MyPy 这样的工具,它是一个静态分析器。

标签: python-3.x type-hinting


【解决方案1】:

它被称为类型 hinting 的原因是:您向 IDE 或其他阅读您的代码的人提供了一个关于变量应该是什么的提示。在运行时,类型提示实际上没有任何意义——它们的存在是为了其他开发人员的文档和可用性。如果你违反类型提示,python 不会阻止你(它假设你知道自己在做什么),但这是不好的做法。

请注意,这与 Java 等静态类型语言不同,后者试图传递与函数定义不兼容的参数将产生编译时错误,并且如果您传递不同类型但兼容的参数(例如传递float 到一个需要 int 的函数)它将被自动类型转换。

请注意,如果程序员按照他们应该的方式使用它,您给出的代码将遇到TypeError,因为int 不能连接到str。您的 IDE 或 linter 应该能够看到这一点并在该行上给您一个警告,它会根据类型提示来执行此操作。这就是类型提示的用途 - 告知 IDE 和文档的行为,并提供一个危险信号,表明您可能没有以预期的方式使用函数 - 在运行时没有任何内容。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-10
    • 2013-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-02
    • 2020-06-02
    • 2013-09-30
    相关资源
    最近更新 更多