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

函数捕获Exception时如何继续执行while循环?

解决方案

方法1:让函数返回执行状态标记

既然每个函数内部已经写了try/except块,那可以在捕获异常时返回一个失败标记(比如False),正常执行完逻辑后返回True。主循环里调用每个函数后立刻检查返回值,只要有一个函数返回False,就执行continue跳回循环顶部。

示例代码:

def func1():
    try:
        # 这里写func1的业务逻辑
        print("执行func1")
        # 可以取消下面的注释模拟异常
        # raise Exception("func1出错啦")
        return True
    except Exception as e:
        print(f"func1捕获异常: {str(e)}")
        return False

def func2():
    try:
        # 这里写func2的业务逻辑
        print("执行func2")
        # 可以取消下面的注释模拟异常
        # raise Exception("func2出错啦")
        return True
    except Exception as e:
        print(f"func2捕获异常: {str(e)}")
        return False

# 永久循环
while True:
    # 逐个调用函数,只要有一个失败就重启循环
    if not func1():
        continue
    if not func2():
        continue
    # 其他函数按同样方式添加...
    
    # 所有函数都正常执行时,才会走到这里
    print("本轮所有函数执行完成,进入下一轮")

这种方式不需要在主循环里堆一堆try/except,只需要判断返回值,代码结构清爽。

方法2:自定义异常+主循环统一捕获

如果觉得返回值的方式不够直观,可以定义一个专属的自定义异常类。让每个函数在捕获到通用Exception后,抛出这个自定义异常,然后在主循环最外层加一个try/except块专门捕获它,捕获到就执行continue。

示例代码:

# 定义一个自定义异常,用来标记任务执行失败
class TaskFail(Exception):
    pass

def func1():
    try:
        # func1的业务逻辑
        print("执行func1")
        # 取消注释模拟异常
        # raise Exception("func1出问题了")
    except Exception as e:
        print(f"func1捕获异常: {str(e)}")
        # 抛出自定义异常通知主循环
        raise TaskFail from e

def func2():
    try:
        # func2的业务逻辑
        print("执行func2")
        # 取消注释模拟异常
        # raise Exception("func2出问题了")
    except Exception as e:
        print(f"func2捕获异常: {str(e)}")
        raise TaskFail from e

# 永久循环
while True:
    try:
        func1()
        func2()
        # 其他函数按同样方式添加...
        
        # 所有函数正常执行后的逻辑
        print("本轮任务全部完成,准备下一轮")
    except TaskFail:
        # 只要捕获到自定义异常,就直接回到循环开头
        continue

这种方式主循环只需要一个try/except块,语义更清晰——抛出TaskFail就明确表示“这个任务失败了,要重启循环”,后续如果有不同类型的失败场景,还可以扩展自定义异常的子类,灵活性更强。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 04:25:17