Python 没有强制输入
Python typing is not getting enforced
我正在测试 ^Python3.6 的输入功能,但它似乎什么也没做,我可以这样做而不会出错:
my_var: int = 0
my_var = 'str'
# no error
def ret_var(my_var: int) -> int:
return my_var
ret_var(my_var)
# also no error
我怎样才能让它抛出一个异常或至少一个警告?
类型注释本身不会做任何事情来强制类型,它们所做的是准备您的代码以供类型检查器(例如 Mypy)评估,同时允许以编程方式读取函数注释以实现更智能的功能装饰器。
如果您出于某种原因想要在不使用类型检查器的情况下开始强制执行类型,您可以修饰您的函数。我在 github 上有一个这样的装饰器,除了标准注释外还支持 Union[]
、Optional[]
和 Any
:
用法:
from type_enforcer import enforce_types
@enforce_types
def foo(x: int, y: float) -> int:
return int(x * y)
>>> try:
>>> foo(5, 2.0)
>>> except TypeError as e:
>>> print(str(e))
10
>>> try:
>>> foo(5, 2)
>>> except TypeError as e:
>>> print(str(e))
Argument y supplied wrong type: expected float, got int.
我正在测试 ^Python3.6 的输入功能,但它似乎什么也没做,我可以这样做而不会出错:
my_var: int = 0
my_var = 'str'
# no error
def ret_var(my_var: int) -> int:
return my_var
ret_var(my_var)
# also no error
我怎样才能让它抛出一个异常或至少一个警告?
类型注释本身不会做任何事情来强制类型,它们所做的是准备您的代码以供类型检查器(例如 Mypy)评估,同时允许以编程方式读取函数注释以实现更智能的功能装饰器。
如果您出于某种原因想要在不使用类型检查器的情况下开始强制执行类型,您可以修饰您的函数。我在 github 上有一个这样的装饰器,除了标准注释外还支持 Union[]
、Optional[]
和 Any
:
用法:
from type_enforcer import enforce_types
@enforce_types
def foo(x: int, y: float) -> int:
return int(x * y)
>>> try:
>>> foo(5, 2.0)
>>> except TypeError as e:
>>> print(str(e))
10
>>> try:
>>> foo(5, 2)
>>> except TypeError as e:
>>> print(str(e))
Argument y supplied wrong type: expected float, got int.