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

如何在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},跳过该文件")

几个关键细节说明

  1. 外层try-except包裹整个文件处理:这样只要单个文件的任何步骤出错,都会触发异常捕获,程序不会崩溃,直接进入下一次循环处理下一个文件。
  2. 可选:只跳过错误行而非整个文件:如果只是部分行有问题,不想放弃整个文件的数据,可以把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数据的后续处理逻辑
  1. 修复了原代码的小问题:你原代码里的for i, line in inputfile:会报错,因为文件对象迭代出来的只有行内容,没有索引,需要用enumerate(inputfile)来同时获取索引和行内容。

针对你遇到的具体错误

你碰到的ValueError: invalid literal for int() with base 10: '',是因为某个行的line[34:36]截取到的是空字符串,转成整数时失败。上面的两种方案都能解决这个问题,你可以根据自己的需求选择是跳过整个文件,还是只跳过错误行。

内容的提问来源于stack exchange,提问作者Srivatsa Sharma G

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:43:49