Python 如果传递给带注释函数的参数类型不';与指定的不匹配?

Python 如果传递给带注释函数的参数类型不';与指定的不匹配?,python,type-hinting,python-3.5,Python,Type Hinting,Python 3.5,python3.5的一个新特性是类型暗示。例如,下面的代码现在有效: def greeting(name: str) -> str: return 'Hello ' + name 但是,据我所知,它本身并不检查任何东西,而且它的解释方式与此完全相同: def greeting(name): return 'Hello ' + name 它的实现主要是为了帮助静态分析器(并使代码更容易理解)。但是,当一个无效类型的参数被传递给一个带有注释的参数类型的函数(仅使用类型提示语

python3.5的一个新特性是类型暗示。例如,下面的代码现在有效:

def greeting(name: str) -> str:
    return 'Hello ' + name
但是,据我所知,它本身并不检查任何东西,而且它的解释方式与此完全相同:

def greeting(name):
    return 'Hello ' + name

它的实现主要是为了帮助静态分析器(并使代码更容易理解)。但是,当一个无效类型的参数被传递给一个带有注释的参数类型的函数(仅使用类型提示语法)时,是否有(或计划在将来实现)任何方法(可能通过使用一些第三方库)使python抛出错误?

我认为最简单的方法是检查类型:

def greeting(name):
    if not isintstance(name, str):
        raise TypeError('Expected str; got %s' % type(name).__name__)
    return 'Hello ' + name
类型提示实现显式列出为非目标的提示:

而拟议的打字模块将包含一些用于 运行时类型检查——特别是get_type_hints()函数 --必须开发第三方包来实现特定的运行时类型检查功能,例如使用 装饰器或元类。使用类型提示提高性能 优化留给读者作为练习


由此看来,Python开发人员似乎没有计划添加您所寻求的功能。引文中提到了装饰师,这似乎是正确的做法。从概念上讲,这似乎很简单——装饰程序将在要装饰的函数上使用
get\u type\u hints()
,并将遍历参数,根据任何提示检查它们的类型,如果发生冲突则抛出错误,或者只是将参数传递给函数。这类似于pzelasko的回答,但装饰师使用提示自动处理锅炉板代码。最简单的方法是简单地检查参数,不过您也应该能够创建一个decorator,如果返回类型与提示冲突,它将引发错误。我还没有Python3.5,也没有时间去学习它——但是对于想学习装饰器和类型提示的人来说,这似乎是一个很好的学习练习。也许你可以成为政治公众人物提到的“第三方”之一。

你可以在运行时使用库来完成这项工作。

是的,这是我通常做的,不过,如果有可能让python像对待您答案中的代码一样对待我的第一个示例中的代码,那就太好了。稍微编辑一下问题,让它更清楚地表明我想要使用类型暗示语法的解决方案。无论如何,感谢您的回复:)
type()
不适用于子类。我认为使用是首选的方法。如果提示是可访问的,那么您应该能够创建一个装饰器,它将导致装饰函数在这样的情况下抛出错误situations@JohnColeman谢谢,我试试看。