我们的代码中有一个典型的数据转换模式:当值为 None 时,我们让它通过。例如,
def capitalize(value):
if value is None:
return None
return value.capitalize()
# usage example:
assert capitalize(None) is None
assert capitalize("hello world") == "Hello world"
Run Code Online (Sandbox Code Playgroud)
我可以这样注释它:
from typing import Optional
def capitalize(value: Optional[str]) -> Optional[str]:
if value is None:
return None
return value.capitalize()
Run Code Online (Sandbox Code Playgroud)
看起来不错,但是下面的代码
capitalize("Hello world").split()
Run Code Online (Sandbox Code Playgroud)
总是会让mypy抱怨。
error: Item "None" of "Optional[str]" has no attribute "split"
Run Code Online (Sandbox Code Playgroud)
有没有办法用类型注解来表达“None总是转换为None,str总是转换为str”的转换规则?