繁体   English   中英

输入提示 yaml 文件的正确方法是什么?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM