能否实现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
相关产品推荐
相关产品推荐

