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

能否实现Python脚本报错时自动重运行?如何操作?

Python代码报错自动重运行的实现方案

完全可行,针对你这种报错不影响后续流程、重启就能正常运行的场景,有几种简单直接的实现方式:

1. 基础while循环+try-except包裹

这是最直观的写法,把核心业务逻辑放到try块里,捕获异常后自动重启:

import time

def main():
    # 这里替换成你的实际业务代码
    print("脚本正在运行...")
    # 模拟可能出现的报错(实际使用时删除这行)
    # raise RuntimeError("临时报错,重启即可解决")

while True:
    try:
        main()
        # 如果脚本正常执行完需要退出,取消下面的注释
        # break
    except Exception as e:
        print(f"遇到错误: {str(e)},5秒后自动重启...")
        time.sleep(5)  # 延迟几秒再重启,避免频繁重试

注意:如果只想捕获特定类型的异常(比如只处理网络请求报错),可以把Exception换成具体的异常类(比如requests.exceptions.RequestException),避免捕获语法错误这类致命问题导致无限循环。

2. 用装饰器封装重试逻辑

如果脚本有多个需要重试的函数,用装饰器可以让代码更整洁、复用性更强:

import time
from functools import wraps

def auto_retry(delay=5, max_retries=None):
    """自动重试装饰器,可选设置延迟时间和最大重试次数"""
    def decorator(func):
        @wraps(func)
        def wrapper(*args, **kwargs):
            retry_count = 0
            while True:
                try:
                    return func(*args, **kwargs)
                except Exception as e:
                    retry_count +=1
                    print(f"执行出错: {str(e)}")
                    # 如果设置了最大重试次数,达到后终止
                    if max_retries is not None and retry_count > max_retries:
                        print(f"已达到最大重试次数({max_retries}),终止运行")
                        raise
                    print(f"{delay}秒后重试...")
                    time.sleep(delay)
        return wrapper
    return decorator

@auto_retry(delay=3)
def main():
    # 你的业务代码
    print("执行核心业务逻辑...")
    # 模拟报错
    # raise ConnectionError("临时连接失败")

if __name__ == "__main__":
    main()

这种方式可以给不同函数设置不同的重试参数,代码结构更清晰。

额外提醒

  • 不要盲目捕获所有异常:区分可恢复的临时错误(比如资源占用、网络波动)和致命错误(比如语法错误、参数缺失),只对前者做自动重试。
  • 合理设置延迟时间:根据报错原因调整,比如网络问题可以设3-5秒,资源问题可以设更长。
  • 正常退出逻辑:如果脚本有正常执行完毕的情况,记得在main函数末尾加return或者在循环里加break,避免脚本无限循环运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 20:20:35