使用try-except结构从字典列表中筛选输出国籍US的实现方案
实现方案
原有代码问题
- 类型判断语句
item["types"] == ["nationality", "political"]仅做了等值判断,没有作为过滤条件生效 - 未添加国籍值为「US」的过滤逻辑
- 全局捕获所有异常的规则过于宽泛,会掩盖键不存在、索引越界等其他报错,不利于问题排查
- 代码缩进不符合Python语法要求
正确实现代码
try: list_components = js['results'][0]['list_components'] has_us_nationality = False for item in list_components: try: # 先校验条目类型为国籍类,再判断国籍值为US if item["types"] == ["nationality", "political"] and item["short_name"] == "US": print('列表对应的国籍信息为:', item["short_name"]) has_us_nationality = True except KeyError: # 捕获当前条目缺少types/short_name键的情况,直接跳过即可 continue if not has_us_nationality: print('该列表无可用的国籍信息。') except (KeyError, IndexError): # 捕获js整体结构不符合预期的情况:缺失results键、results为空、缺失list_components键 print('该列表无可用的国籍信息。')
实现说明
- 采用两层嵌套try/except结构:外层专门处理源数据js整体结构不符合预期的异常,内层处理单条条目缺失对应键的异常,避免无差别捕获所有报错
- 仅当条目同时满足「类型为国籍政治类」「短名称为US」两个条件时,才输出对应信息
- 用标记位
has_us_nationality判断遍历结束后是否存在符合要求的国籍信息,避免无匹配结果时漏输出提示
内容的提问来源于stack exchange,提问作者JIA K
相关产品推荐
相关产品推荐

