如果在 Python 中违反/忽略类型提示,会引发错误吗?

问题描述 投票:0回答:2

查看这个问题后我了解到,默认情况下,在执行Python代码时不会强制执行类型提示。

人们可以使用稍微复杂的过程来检测类型提示和实际参数类型之间的some差异,即在运行Python代码时运行

pyannotate
来生成存根,并在将这些存根应用到代码后扫描差异。

但是,如果传入参数不是类型提示中包含的类型,则直接引发异常会更方便/更快。这可以通过手动包含来实现:

if not isinstance(some_argument, the_type_hint_type):
    raise TypeError("Argument:{argument} is not of type:{the_type_hint_type}")

但是,这是相当劳动密集型的。因此,我很好奇,如果使用 CLI 参数或 pip 包或类似的东西违反了类型提示,是否有可能让 Python 引发错误?

python runtime python-typing
2个回答

2
投票

@Surya_1897 的答案的编辑队列已满,因此我将在此处包含该解决方案的更详细描述。

Typeguard 正是我想要的。适用以下要求:

  1. 安装打字防护:
pip install typeguard
  1. 将 typeguard 导入到每个脚本中,并在
    each
    函数上方添加 @typechecked 属性。
  2. 示例: 变化:
"""Some file description."""

def add_two(x:int):
    """Adds two to an incoming int."""
    return x+2
somevar:float=42.1
add_two(somevar)

致:

"""Some file description."""
from typeguard import typechecked


@typechecked
def add_two(x:int):
    """Adds two to an incoming int."""
    return x+2
somevar:float=42.1
add_two(somevar)

后者会抛出错误:

TypeError:参数“x”的类型必须是 int;改为浮动

© www.soinside.com 2019 - 2024. All rights reserved.