如何使用Python3.5类型作为运行时检查?

时间:2017-01-20 10:24:53

标签: python typing

我使用Python3.5输入模块,以便为我的类和函数提供类型提示。它可以很好地与PyCharm一起使用,因为它利用了这些提示。

但是,我想强制python解释器在提供类型提示时执行运行时类型检查(或者至少抛出一些警告)。

当前状态:

In [1]: def times2(number: int):
   ...:     return number + number
   ...: 

In [2]: times2(8)
Out[2]: 16

In [3]: times2('8')
Out[3]: '88'

期望状态:

In [1]: def times2(number: int):
   ...:     return number + number
   ...: 

In [2]: times2(8)
Out[2]: 16

In [3]: times2('8')
Out[3]: Assertion error: '8' is not an int

我可以以某种方式强制执行python吗?

2 个答案:

答案 0 :(得分:0)

你可以使用这样的断言:

def times2(number: int):
    assert type(number) is IntType, "number is not an int: %r" % number
    return number + number

或者我误解了你的问题?

答案 1 :(得分:0)

来自https://www.python.org/dev/peps/pep-0484/#non-goals

  

虽然建议的键入模块将包含一些运行时类型检查的构建块[…]第三方程序包必须开发以实现特定的运行时类型检查功能

  

还应该强调的是,Python仍将是一种动态类型化的语言,即使是按照惯例,作者也不希望使类型提示成为强制性的。

Python键入被设计为一种皮棉工具,以便开发人员可以检查其代码是否正确调用了其他代码(就键入支持而言-已检查类型,但您仍然可以具有无效值!)。它不用于运行时检查,也不用于验证或拒绝用户输入。其他库可以在stdlib(https://docs.python.org/3/library/dataclasses.html)或第三方(https://github.com/search?q=python+runtime+typing&type=Repositories)中基于键入概念来实现这些概念。