【问题标题】:Force fuction args type with python [duplicate]用python强制函数args类型[重复]
【发布时间】:2021-05-21 06:32:24
【问题描述】:

我想强制该 arg 运行将是 str ,所以我在函数 args 中使用了 :str

def func (a:str):
    print(a)
func(int(2))

这段代码可以运行并且没有失败,为什么?

【问题讨论】:

标签: python python-3.x arguments


【解决方案1】:
def func (a:str):
    print(a)
func(int(2))

您使用的是 Type Hint,如 PEP 484 所述。简而言之,它只是指导方针,没有任何强制执行作用。您可以使用isinstance 函数来检查参数是否符合您的要求,并使用raise TypeError 否则如下方式:

def func(a):
    if not isinstance(a, str):
        raise TypeError
    print(a)

您还可以(与运行时检查一起或代替它)使用 静态类型检查器,它将尝试利用这些注释(以及它可能从未注释的代码中推断出的内容)和检查它们是否都匹配。默认情况下,Python(故意且有意地)包含添加类型提示的语法,但不会执行任何类型检查:这不被认为是 Python 语言本身的一部分(尽管 Python 的某些部分使用类型 annotations,如数据类)。

首要的类型检查器是 mypy 并在 Python 项目的保护下开发,但有多种替代方案(我不一定测试过 YMMV),例如Facebook 的pyre、谷歌的pytype 或微软的pyright,以及诸如jetbrains 等IDE 的内置类型检查等集成工具。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-01-29
    • 1970-01-01
    • 2021-08-23
    • 2019-07-16
    • 1970-01-01
    • 2021-06-24
    • 1970-01-01
    • 2010-11-26
    相关资源
    最近更新 更多