在Union上分配的类型不兼容

时间:2018-01-06 13:06:59

标签: python python-3.x types python-3.5 mypy

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]]

1 个答案:

答案 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}}

将来我还建议您在发布之前花几分钟时间来简化您的示例,以便其他人可以重现。