Python unittest调用print_blogs报list无items属性及输出不匹配问题咨询
问题排查与解决方法
1. AttributeError: 'list' object has no attribute 'items'错误原因
这个报错的根因是你代码中调用items()方法的blogs[0]实际是列表类型,只有字典类型支持items()方法遍历键值对。
你可以先在函数开头加一行调试代码确认数据结构:
print(type(blogs), type(blogs[0]), blogs)
绝大多数情况是你本地的blogs变量层级和课程示例不一致,比如老师的blogs[0]是字典,而你的blogs多套了一层列表,或者初始化blogs时格式写错。
2. 输出内容不全的问题原因
你当前的代码是遍历单个对象的键值对,每次循环只会输出单个字段的值,比如你的博客字典结构为{'name':'Test', 'author':'Test Author', 'post_count':0},第一次循环取到的value就是Test,自然只会输出- Test,没有拼接其他字段。
你修改后的版本只是把单个值塞进列表打印,完全没有解决字段拼接的问题。
正确代码示例
如果你的blogs是列表结构,每个元素对应一个博客字典,直接遍历整个列表,拼接对应字段输出即可:
def print_blogs(): for blog in blogs: # 按预期格式拼接三个字段:博客名、作者、文章数 print("- {} by {} ({} posts)".format(blog['name'], blog['author'], blog['post_count']))
如果你的blogs确实多套了一层外层列表,就把遍历对象改成blogs[0]:
def print_blogs(): for blog in blogs[0]: print("- {} by {} ({} posts)".format(blog['name'], blog['author'], blog['post_count']))
额外注意事项
如果和老师代码完全一致但运行结果不同,100%是本地的blogs全局变量的结构/字段和老师的测试环境不一致,重点核对:
blogs的嵌套层级- 每个博客字典的键名是否正确,有没有拼写错误
- 博客数据的字段值是否符合预期
内容的提问来源于stack exchange,提问作者Ksawery
相关产品推荐
相关产品推荐

