Python的for循环触发异常时能否不递增计数重复当前迭代?
解决方案
Python的for循环基于迭代器实现,range(10)生成的迭代器每次会自动返回下一个整数,你在循环体内修改i的值无法影响迭代器的输出,所以原生for循环没办法直接实现异常时不递增计数的需求,下面提供两种可行实现:
方案1:改用while循环手动控制计数(最直观)
自己维护计数变量,只有当前次迭代执行成功时才递增计数,异常时保持计数不变:
i = 0 # 等价于原来的range(10) while i < 10: try: print(i) # 执行无异常才对计数+1 i += 1 except: # 异常时跳过计数递增,下次循环仍使用当前i值 pass
方案2:for循环嵌套内部重试循环(保留外层for结构)
如果不想修改外层的for循环写法,或者外层遍历的不是数字序列(比如要遍历列表元素做处理),可以在每次迭代内部加一层死循环做重试,只有当前次执行成功才跳出内部循环,进入下一个迭代:
for i in range(10): while True: try: print(i) # 执行成功跳出内部重试循环,进入下一个i break except: # 异常时继续重试当前i continue
注意:生产环境不建议使用裸
except,请指定你需要捕获的具体异常类型,避免误吞键盘中断、系统退出等关键异常。
内容的提问来源于stack exchange,提问作者jedafi6620
相关产品推荐
相关产品推荐

