为什么类型检查在 Python 3 中不起作用?
我已经完成了以下带有类型检查或提示的代码:
import typing
def hello(message: str):
print(type(message))
print(message)
hello('Hello!')
hello(1)
hello(1.1)
它产生有效的输出(但在 int 或 float 上没有错误)。
<class 'str'>
Hello!
<class 'int'>
1
<class 'float'>
1.1
为什么会这样?可能我不理解 typing 模块和 Python 提示。
最佳答案
Python 的类型提示仅供引用。参数类型的类型检查或自动强制转换不是该语言的一部分。参见 PEP 3107 :
Function annotations are nothing more than a way of associating arbitrary Python expressions with various parts of a function at compile-time.
附加模块可以使用类型提示来检查参数类型和返回值,甚至可以将参数强制转换为预期类型。例如,here是一个模块,它将检查参数类型并在发现不匹配时进行投诉。
但这不是 Python 本身的工作方式,所以不要依赖它,也不要寻找将它引入代码的方法。在 Python 风格中,您的函数应该被编写为尽可能灵活地处理它们可以使用的参数类型(谷歌“鸭子类型”)。如果他们得到了他们无法处理的东西……好吧,这就是异常(exception)的原因。
更新:typing
提供类型提示支持的模块从 Python 3.5 开始被添加到标准库中(“临时”)。它提供了一些有用的类型名称,包括 Any
、Callable
和 Union
,以及一个辅助函数 NewType
。类型提示仍然非常非常可选。
关于Python 3 类型检查不适用于 use typing 模块?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43976861/