【发布时间】:2018-01-06 13:06:59
【问题描述】:
Mypy 向我打印以下消息:
x.py:74: 错误:赋值中的类型不兼容(表达式有类型 "Union[str, Dict[str, str]]", 变量类型为"str")
这不奇怪吗? str 是 Union[str, Dict[str, str]] 的一部分
代码如下:
def get_multiple(fields: List[str], config_data) -> Dict[str, str]:
config_results = {k: v for k, v in config_data.items() if k in fields}
log_missing_fields(fields, config_results)
return config_results
def get_single(field: List[str], config_data) -> str:
result = config_data.get(field)
if result is None:
log.warning('The following fields are missing: %s', field)
return result
def get(fields: Union[str, List[str]]) -> Union[str, Dict[str, str]]:
log.debug('Retrieving values %s from config', str(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() -> str:
timeout = get('timeout') # type: str <-- Line 74 is here
log.info('Trying to connect the servers.')
with db_session() as db_handler:
url = scan_availability(db_handler, int(timeout))
if url:
return url
log.critical("Could not find available servers.")
raise ConnectionError("Could not find available servers.")
【问题讨论】:
-
问题是
Union[str, Dict[str, str]]不是str的一部分。 -
换句话说,您试图将可以是
str或dict的东西分配给只能包含str的变量。如果get()返回字典怎么办?
标签: python python-3.x types python-3.5 mypy