在函数内部声明变量类型

3
我正在定义一个获取PDF字节的函数,所以我写了以下代码:
def documents_extractos(pdf_bytes: bytes):
    pass

当我调用函数并不幸传递了错误的类型,比如说一个整数而不是字节,为什么我没有收到错误信息?我已经阅读了有关类型的文档,但我还是不明白。告诉函数变量应该是字节的目的是什么?当你传递一个整数时为什么没有出现错误?这可以通过isinstance(var, <class_type>)来处理,对吗?我不理解它 =(
2个回答

1

默认情况下,Python 在运行时忽略类型提示,但是在代码执行时保留类型信息。由于这个库的存在,作者可以实现运行时类型检查包,例如 typeguardpydanticbeartype

如果您不想自己使用 isinstance 检查,可以使用其中一个库。

Typeguard 示例:

main.py:

from typeguard import importhook
importhook.install_import_hook('mypack')

import mypack


mypack.documents_extractos("test")

mypack.py

def documents_extractos(pdf_bytes: bytes):
    pass

当你运行python3 main.py时,会得到一个错误TypeError:参数“pdf_bytes”的类型必须类似于字节;实际为字符串

“不是默认情况下”;Python会忽略它们,这是确定的。你的代码是否进一步使用它们是另一回事。 - chepner

1

类型提示在运行时被忽略。

在页面顶部,您链接的文档 包含一条注释(重点是我自己加的):

Python 运行时不强制执行函数和变量类型注释。 它们可以被第三方工具使用,例如类型检查器、IDE、linter 等。

类型提示的目的是为了静态类型检查工具(例如 mypy),它们使用静态分析来验证您的代码是否符合编写的类型提示。这些工具必须作为单独的进程运行。它们的主要用途是确保大型代码库中的新更改不会引入潜在的类型问题(这些问题最终可能成为难以解决的潜在错误)。

如果您想要显式的运行时类型检查(例如,如果将错误类型的值传递到函数中,则引发 Exception),请使用 isinstance()


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接