遍历列表/星表未找到目标元素时,如何输出错误提示?
解决遍历列表未找到目标时的错误提示问题
其实你这两个问题本质是同一个场景——当遍历完整个集合(不管是普通列表还是你的星表)都没找到目标元素时,如何给出提示。下面结合你的代码片段给你两种实用的解决方案:
方法1:使用标记变量跟踪是否找到目标
我们可以先定义一个布尔变量来记录是否找到目标,遍历过程中如果找到就更新标记并跳出循环,遍历结束后根据标记判断是否输出错误提示:
big_str = "0.998448,0.035746,-0.042707,352,6.18,14\n0.873265,0.031968,0.486196,358,2.07,15,ALPHERATZ\n0.512379,0.020508,0.858515,432,2.28,21,CAPH\n0.883455,0.044652,-0.466383,720,5.41,34\n0.963482,0.055705,0.261913,886,2.83,39,ALGENIB\n0.752989,0.044458,0.656529,905,5.71,41" def getStarString(target_name): line_list = big_str.split("\n") found = False # 标记是否找到目标恒星 for line in line_list: parts = line.split(",") # 判断当前行是否包含恒星名称(注意有些行没有名字) if len(parts) >=7 and parts[-1] == target_name: print(f"找到恒星 {target_name}: {line}") found = True break # 找到后跳出循环,不用继续遍历 # 遍历结束后检查标记 if not found: print(f"错误:未找到名为 {target_name} 的恒星") # 测试找Bob的情况 getStarString("Bob")
方法2:利用Python的for...else语法(更简洁)
Python的for循环有个特殊的else块——当循环没有被break中断(也就是正常遍历完所有元素)时,else块就会执行。这个特性刚好适配我们的场景:
big_str = "0.998448,0.035746,-0.042707,352,6.18,14\n0.873265,0.031968,0.486196,358,2.07,15,ALPHERATZ\n0.512379,0.020508,0.858515,432,2.28,21,CAPH\n0.883455,0.044652,-0.466383,720,5.41,34\n0.963482,0.055705,0.261913,886,2.83,39,ALGENIB\n0.752989,0.044458,0.656529,905,5.71,41" def getStarString(target_name): line_list = big_str.split("\n") for line in line_list: parts = line.split(",") if len(parts) >=7 and parts[-1] == target_name: print(f"找到恒星 {target_name}: {line}") break else: # 只有当循环没被break时才会走到这里 print(f"错误:未找到名为 {target_name} 的恒星") # 测试找Bob的情况 getStarString("Bob")
两种方法都能解决你的问题,个人更推荐第二种,因为它更符合Python的简洁风格,不需要额外的标记变量。
内容的提问来源于stack exchange,提问作者Jasmines
相关产品推荐
相关产品推荐

