【发布时间】:2019-07-11 01:19:16
【问题描述】:
我正在尝试在一个用 Python 编写的项目中使用typing 模块强制执行一些静态类型检查。
当我定义像the one from the doc这样的函数时
def greeting(name: str) -> str:
return 'Hello ' + name
并尝试执行greeting(3) 之类的操作,我确实遇到了以下错误
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 2, in greeting
TypeError: must be str, not int
但是当我再次定义一个名为test的函数时
def test(a: int) -> None:
print(a)
然后执行test("a"),我打印了a,没有出现任何错误。我也试过了
def test(a: str) -> None:
print(a)
然后执行test(3),但没有引发 TypeError。
我在完全相同的环境中定义了这两个函数,即使用 iTerm 的交互 python 会话。为什么会这样?
【问题讨论】:
-
greeting 引发的 TypeError 来自将整数添加到字符串中,而不是由于类型检查
-
但是如果类型注释根本不强制类型检查,那么文档中的“静态类型检查器”是什么意思呢?
标签: python typechecking static-typing