You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python双层while循环中try-except重试逻辑的执行机制咨询

代码执行逻辑验证结论

你对成功拉取场景下的代码执行流程理解完全正确,以下是全场景的实际运行规则说明:

正常无异常场景流程

和你描述的逻辑完全一致:

  • 外层while True常驻循环启动后,首先初始化重试计数try_cnt = 10,进入内层重试循环
  • 调用get_current_price(symbol)成功获取价格后,执行打印操作,随后time.sleep(1)等待1秒
  • 手动将try_cnt置为0,执行break跳出内层重试循环
  • 回到外层while True下一轮迭代,先执行定时任务判断,再重置try_cnt=10,重新进入内层循环拉取价格,持续循环运行

异常触发重试场景流程

这部分是你之前的理解没有覆盖到的分支:

  • 接口调用抛出异常被捕获后,会打印错误信息,将try_cnt减1,不会触发等待逻辑,直接进入内层循环的下一轮重试
  • 如果连续10次调用全部失败,try_cnt会递减到0,内层循环条件不满足自动退出,回到外层while True进入下一轮,再次重置try_cnt=10开启新一轮10次重试

现有代码的异常分支没有设置重试间隔,接口连续报错时会瞬间打完10次重试,很容易触发交易所接口的限流规则,建议在except块中增加短等待,比如time.sleep(0.2)

带定时任务的版本注意事项

你写的零点触发functionA的逻辑存在漏触发风险:

  • 如果内层重试过程刚好跨过零点,或是time.sleep(1)的等待时间覆盖了零点整的那1秒,定时判断条件就会被错过,任务不会执行
  • 如果对定时任务触发精度要求不高可以保留现状,精度要求高的话建议把定时任务拆到单独线程运行,不要和价格拉取逻辑共用同一个事件循环

内容的提问来源于stack exchange,提问作者jy2da

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 14:09:18