![](/img/trans.png)
[英]What is the proper way to type hint the return value of an @asynccontextmanager?
[英]What is the proper way to type hint yaml files?
键入提示 yaml 文件的正确方法是什么?
下面的 function 的目的是检查是否存在密钥。 如果是,那么我想将它作为一个列表返回,如果不是,那么我想返回一个 NoneType。 我成功返回None
,但typing
时无法识别我正在返回List[str]
或None
。
import yaml
from collections import defaultdict
from typing import Dict, Tuple, List, Union, Any, Optional
def check_yaml(
opts: Dict[str, Dict[str, Any]]
) -> Tuple[Union[List[str], None],
Union[List[str], None]]:
d = defaultdict(list)
if opts.get('Main', None) is not None:
for sub_key in opts['Main'].keys():
d['sub_key'].append(sub_key)
if opts['Main'][sub_key]['name'] is not None:
d['name'].append(opts['Main'][sub_key]['name'])
else:
d['name'].append(None)
if opts['Main'][sub_key]['task'] is not None:
d['task'].append(opts['Main'][sub_key]['task'])
else:
d['task'].append(None)
else:
d['name'].append(None)
d['task'].append(None)
return list(d['name']), list(d['task'])
我收到以下错误,不知道为什么。
Argument 1 to "append" of "list" has incompatible type "None"; expected "str"
您的类型提示是说您正在返回一个包含 2 个元素的元组,这些元素是:
None
不同之处在于您需要一个元组,包含 2 个字符串或None
列表。
这转化为略有不同:
...
) -> Tuple[List[Union[str, None]],
List[Optional[str]]]:
我为此设置了两个可能的选项,因为Optional[x]
等效于Union[x, None]
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.