Mypy打印出以下信息:
x.py:74:错误:赋值中的类型不兼容(表达式具有类型 " Union [str,Dict [str,str]]",变量有类型" str")
难道不奇怪吗? >>> print padZero(0.01, 4)
0.010
>>> print padZero(15,3)
15.0
是str
代码如下:
Union[str, Dict[str, str]]
答案 0 :(得分:3)
避免此问题的正确方法是使用str
装饰器来描述函数参数与其结果之间的关系。
函数Optional[str]
将返回None
(实际上是str
,因为它也可以返回list
)如果它被传递from typing import *
def read_config() -> Dict[str, str]:
return {}
def get_multiple(fields: List[str], config_data: Dict[str, str]) -> Dict[str, str]:
config_results = {k: v for k, v in config_data.items() if k in fields}
return config_results
def get_single(field: List[str], config_data: Dict[str, str]) -> Optional[str]:
result = config_data.get(field)
return result
@overload
def get(fields: str) -> Optional[str]: ...
@overload
def get(fields: List[str]) -> Dict[str, str]: ...
def get(fields):
config_data = read_config()
get_data = get_multiple if isinstance(fields, list) else get_single
return get_data(fields, config_data)
def get_ts_url() -> None:
timeout = get('timeout')
if TYPE_CHECKING:
reveal_type(timeout)
它将会如果传递了Revealed type is 'Union[builtins.str, builtins.None]'
,则返回字典。以下是我们如何使用类型注释来描述:
{{1}}
如果您对此运行mypy,则会打印
{{1}}
将来我还建议您在发布之前花几分钟时间来简化您的示例,以便其他人可以重现。