我有两个函数:
def get_foo(params) -> Optional[str]
def bar(foo: str)
还有一个函数,它将这些函数链接在一起:
def f(params):
# other stuff up here
foo = get_foo(params)
return bar(foo)
我知道基于函数中其他发生的事情,get_foo
的结果永远不会是 None。
当我对这个文件运行 mypy
时,当然会出现错误:
error: Argument 1 of "bar" has incompatible type "Optional[str]"; expected "str"
这是有意义的。
我可以添加一个assert foo is not None
语句,但这是热路径代码,在我的测试中它会产生可测量的性能影响。 我想仅为mypy进行类型断言。我该怎么做?
编辑:我还尝试在赋值语句之后添加注释#type: str
,但这也生成了类似的错误。
-O
选项(“优化”),它将在编译时删除assert
,因此不会有运行时惩罚。它所做的唯一其他更改是将__debug__
设置为常量,即False
而不是True
,因此除了assert
之外,大多数代码应该可以无变化地运行。 - ShadowRangerfoo: str = get_foo(params)
这样怎么样?你可能会被迫使用# type: ignore
忽略 MyPy 错误,因为get_foo
返回的是Optional[str]
。 - undefined