如何在Python程序中跳过格式错误的数据文件并继续执行
如何让Python处理文件时跳过错误文件,继续执行?
嘿,这个问题很常见!你需要的是用try-except异常捕获机制把单个文件的处理逻辑包裹起来,这样当某个文件触发错误时,程序会捕获异常、给出提示,然后直接跳到下一个文件继续处理,完全不用删除错误文件或者重启程序。
适配你需求的修改后代码
import glob for filename in glob.glob('datafolder/*.txt'): try: # 用with语句打开文件更安全,会自动帮你关闭文件,避免资源浪费 with open(filename, 'r') as inputfile: npv = [] # 原代码漏了enumerate!直接遍历文件对象拿不到索引,这里修正 for i, line in enumerate(inputfile): # 先把切片内容去空格,避免空字符串或空格导致转int失败 target_str = line[34:36].strip() if target_str: npv.append(int(target_str)) else: print(f"⚠️ 文件{filename}的第{i+1}行切片为空,跳过该行") except ValueError as e: print(f"❌ 处理文件{filename}时出错:{e},跳过该文件") except Exception as e: # 兜底捕获其他可能的异常,比如文件打不开、权限问题等 print(f"❌ 文件{filename}发生未知错误:{e},跳过该文件")
几个关键细节说明
- 外层try-except包裹整个文件处理:这样只要单个文件的任何步骤出错,都会触发异常捕获,程序不会崩溃,直接进入下一次循环处理下一个文件。
- 可选:只跳过错误行而非整个文件:如果只是部分行有问题,不想放弃整个文件的数据,可以把try-except移到行处理的循环里,这样只跳过有问题的行,继续处理当前文件的其他内容,代码示例如下:
import glob for filename in glob.glob('datafolder/*.txt'): with open(filename, 'r') as inputfile: npv = [] for i, line in enumerate(inputfile): try: target_str = line[34:36].strip() npv.append(int(target_str)) except ValueError as e: print(f"⚠️ 文件{filename}第{i+1}行处理失败:{e},跳过该行") # 这里可以添加对当前文件npv数据的后续处理逻辑
- 修复了原代码的小问题:你原代码里的
for i, line in inputfile:会报错,因为文件对象迭代出来的只有行内容,没有索引,需要用enumerate(inputfile)来同时获取索引和行内容。
针对你遇到的具体错误
你碰到的ValueError: invalid literal for int() with base 10: '',是因为某个行的line[34:36]截取到的是空字符串,转成整数时失败。上面的两种方案都能解决这个问题,你可以根据自己的需求选择是跳过整个文件,还是只跳过错误行。
内容的提问来源于stack exchange,提问作者Srivatsa Sharma G
相关产品推荐
相关产品推荐

