Python类型没有得到强制执行

Python类型没有得到强制执行,python,python-3.x,typing,Python,Python 3.x,Typing,我正在测试^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)进行评估,同时允

我正在测试^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)进行评估,同时允许对函数注释进行编程读取,以实现更智能的装饰器等功能

如果出于某种原因希望开始强制执行类型而不使用类型检查器,则可以修饰函数。我在上有一个这样的装饰器,除了支持标准注释外,还支持
Union[]
Optional[]
、和
Any

用法:

从类型强制器导入强制类型
@强制执行类型
def foo(x:int,y:float)->int:
返回整数(x*y)
>>试试:
>>>foo(5,2.0)
>>>除类型错误为e外:
>>>打印(str(e))
10
>>>尝试:
>>>傅(5,2)
>>>除类型错误为e外:
>>>打印(str(e))
参数y提供的类型错误:应为float,得到int。

类型注释本身不执行任何强制类型的操作,它们所做的是准备您的代码由类型检查器(如Mypy)进行评估,同时允许对函数注释进行编程读取,以实现更智能的装饰器等功能

如果出于某种原因希望开始强制执行类型而不使用类型检查器,则可以修饰函数。我在上有一个这样的装饰器,除了支持标准注释外,还支持
Union[]
Optional[]
、和
Any

用法:

从类型强制器导入强制类型
@强制执行类型
def foo(x:int,y:float)->int:
返回整数(x*y)
>>试试:
>>>foo(5,2.0)
>>>除类型错误为e外:
>>>打印(str(e))
10
>>>尝试:
>>>傅(5,2)
>>>除类型错误为e外:
>>>打印(str(e))
参数y提供的类型错误:应为float,得到int。

可能重复@Georgy我不确定,最后有一个可回答的问题,而不是在链接的问题中,特别是如何以引发异常的方式使用注释。@Andy我可以看到,在重复的目标OP中,虽然有相同的请求:“我希望得到以下效果:如果很明显我使用了如上所示的错误类型,请抛出警告或错误“@Georgy你说得对,当我读到可能重复的@Georgy时,我的大脑似乎跳过了这一行。我不确定,最后有一个可回答的问题,而不是在链接的问题中,特别是如何以引发异常的方式使用注释。@Andy我可以看到,在重复的目标OP中,有相同的请求:“我希望得到以下效果:如果很明显我使用了如上所示的错误类型,请抛出警告或错误“@Georgy你是对的,看起来我在阅读时大脑跳过了这一行谢谢这回答了我所有的问题,我不明白python团队为什么设计成那样。非常感谢这回答了我所有的问题,我不明白python团队为什么设计成那样。