如何测试可能不存在的属性?

7 浏览
0 Comments

如何测试可能不存在的属性?

这个问题已经有答案了:

如何检查一个对象是否有属性?

这是从YAML文件中生成文档的脚本的一部分。它没有进展。

    for yaml_filename in yaml_files:
        with open(yaml_filename, 'r') as yaml_file:
            try:
                yaml_contents = yaml.safe_load(yaml_file)
                for api_name in yaml_contents:
                    api = yaml_contents[api_name]
                    if 'api_doc' in api.keys(): # <---- error generated here
                        format_api(api_name, api, html_file)
                    else:
                        # Handle the generation of HTML documentation for APIs
                        # that have not been updated to include the api_doc
                        # object.

我最初得到的错误是这样的:

AttributeError: 'str' object has no attribute 'keys'

我的最初解释是,如果api缺少keys属性,那么我可以更正if测试来处理它,并仍然到达else分支并正确解析文件。所以我尝试的修复方法看起来像这样:

                    if hasattr(api,keys) and 'api_doc' in api.keys():

但现在生成的错误消息是:

NameError: name 'keys' is not defined

我认为hasattr()测试将只返回false,但它却报错了。在python对象的理解上,我已经到了极限,我不知道如何搜索我不知道的内容。发生了什么?脚本一直没问题吗?问题在于yaml.safe_load()失败了吗?还是api格式不正确?

admin 更改状态以发布 2023年5月22日
0
0 Comments

您必须将属性名称指定为字符串,而不是标识符:

if hasattr(api, "keys") and ...:

0