如何在不使用assert的情况下指定函数输入和输出的类型?

时间:2018-06-08 21:19:52

标签: python function variables types python-3.6

我正在使用Python 3.6,并希望定义一个带有两个整数ab的函数,并返回它们的除法c = a//b。我想在不使用assert的情况下强制执行输入和输出类型。根据我在文档和本网站上发现的内容,我的理解是应该定义这个函数:

def divide(a: int, b: int) -> int:
    c = a // b
    return c

divide(3, 2.) # Output: 1.0

我期待错误(或警告),因为bc不是整数。

  1. 我的特定代码有什么问题?
  2. 如何在不使用的情况下正确指定输入和输出类型 一般来说assert

1 个答案:

答案 0 :(得分:5)

执行运行时验证目前仅由用户代码完成,例如使用第三方库。

其中一个选择是enforce

>>> import enforce  # pip install enforce
>>> @enforce.runtime_validation
... def divide(a: int, b: int) -> int:
...     c = a // b
...     return c
... 
... 
>>> divide(3, 2.0)
RuntimeTypeError: 
  The following runtime type errors were encountered:
       Argument 'b' was not of type <class 'int'>. Actual type was float.