Python使用range遍历用户ID遇ID断层抛异常的处理方案咨询
存在ID断层的用户枚举场景实现方案
方案选择结论
优先选择异常捕获实现,不推荐硬编码if条件判断。
硬编码判断区间只适用于你100%确定全库仅存在73-711这一处ID断层、且后续ID规则永远不会变动的场景,通用性极差。只要后续出现新的ID断层,你就需要手动修改判断条件,维护成本高,很容易漏判。
异常捕获的方案不需要提前知道所有断层区间,遇到不存在的ID自动跳过,还能避免漏处理其他非预期错误,鲁棒性强很多。
可直接运行的异常捕获实现代码
from testlink.testlinkerrors import TLResponseError for user_id in range(1, 720): try: user_list = tls.getUserByID(user_id) for user in user_list: fname = user.get('firstName') lname = user.get('lastName') print(user_id, f"{fname} {lname}") except TLResponseError as e: # 仅跳过「用户不存在」的特定业务错误 if "NO_USER_BY_ID_LOGIN" in str(e): continue # 其余接口错误、权限错误等非预期问题正常抛出,不要吞异常 raise
硬编码if判断的实现(仅作参考,不推荐)
如果你确实确认ID断层永远不会变化,可以用这个写法,但是后续出现新的断层需要手动改判断条件:
for user_id in range(1, 720): # 手动跳过已知不存在的ID区间 if 73 <= user_id <= 711: continue user_list = tls.getUserByID(user_id) for user in user_list: fname = user.get('firstName') lname = user.get('lastName') print(user_id, f"{fname} {lname}")
注意事项
- 不要写裸
except:捕获所有异常,会把接口服务异常、权限失效、参数错误等需要排查的真问题直接吞掉,导致问题无法定位 - 原代码里额外赋值
loginID = iD属于冗余操作,可以直接使用循环变量 - 字符串拼接推荐用f-string实现,比
+拼接写法更简洁,可读性更好
内容的提问来源于stack exchange,提问作者ckmb
相关产品推荐
相关产品推荐

