Python中非通用错误处理:脚本遇错后自动重启直至生成20个文件
解决方法
你的核心问题是wrapper.py执行报错时,外层循环没有正确重新检查文件数量并重启进程。现有代码可能存在文件数量变量未实时更新,或未处理子进程报错后的循环延续逻辑。以下是具体修正方案:
1. 实时统计文件数量
不要依赖固定变量存储文件数,每次循环前重新扫描目标目录,按实际生成文件的规则统计数量。比如假设生成的是特定后缀的文件:
import os def count_generated_files(): # 根据你的文件命名/后缀规则修改,比如统计所有.urdf或自定义格式文件 return len([f for f in os.listdir('./your_output_dir') if f.endswith('.your_extension')]) while count_generated_files() < 20: print(f"当前文件数: {count_generated_files()}, 不足20个,重启wrapper.py...") os.system('python3 wrapper.py')
2. 强制循环延续,忽略子进程报错
os.system执行子进程时,子进程报错只会返回非0退出码,不会中断父进程的循环。只要每次循环都重新统计文件数,无论wrapper.py是否崩溃,都会继续执行直到文件数达标。
3. 进阶:捕获错误日志(可选)
如果需要记录报错信息但不中断循环,建议用subprocess.run替代os.system,将错误输出写入日志文件:
import subprocess while count_generated_files() < 20: print(f"当前文件数: {count_generated_files()}, 重启wrapper.py...") with open('wrapper_errors.log', 'a', encoding='utf-8') as log_file: subprocess.run(['python3', 'wrapper.py'], stderr=log_file)
注意事项
- 确保
count_generated_files的统计规则和wrapper.py生成的文件完全匹配(包括存储目录、文件名格式) - 如果
wrapper.py崩溃时会生成不完整的无效文件,建议在统计前删除这类文件,避免计数错误
内容的提问来源于stack exchange,提问作者Rashid Abramov
相关产品推荐
相关产品推荐

