如何解决当函数只能返回 str 时,mypy 抱怨不兼容的返回值类型得到“Optional[str]”,预期为“str”
import os
from typing import Optional
_DEFAULT = 'abc'
def _get_value(param: Optional[str]) -> str:
return param or os.getenv("ParaM",_DEFAULT)
对于这个功能,mypy 会抱怨
Incompatible return value type (got "Optional[str]",expected "str")
但我认为这个函数永远不会返回None
。我错过了什么吗?
解决方法
mypy
类型检查器似乎无法解析 or
条件。您必须明确检查 None
值:
if param:
return param
else:
return os.getenv("PARAM",_DEFAULT)
编辑:上述代码在技术上检查 falsy 值而不是 None
,但它在功能上与您的示例相同。
mypy 似乎缺少对“旧式三元”函数的一些推断——形式为 A or B
或 A and B or C
查看 reveal_type
以获取三个表达式
# reveal_type(param)
t.py:9: note: Revealed type is 'Union[builtins.str,None]'
# reveal_type(os.getenv("PARAM",_DEFAULT)
t.py:10: note: Revealed type is 'builtins.str'
# param or reveal_type(os.getenv("PARAM",_DEFAULT)
t.py:11: note: Revealed type is 'Union[builtins.str,None]'
你可以通过使用真正的三元来解决这个问题:
def _get_value(param: Optional[str]) -> str:
return param if param is not None else os.getenv("PARAM",_DEFAULT)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。