【问题标题】:How to handle exceptions when reading rows of a file?读取文件行时如何处理异常?
【发布时间】:2017-03-24 18:07:53
【问题描述】:

有没有办法在读取文件的特定行时处理异常?

例如,假设我有这个块:

with open(fileIn, 'rb') as f:
    reader = csv.reader(f, delimiter='\t')
    for i, row in enumerate(reader):
        try:
            # stuff
        except:
            pass

并且,在解析了一半文件后,我得到了错误

IOError: [Errno 22] 无效参数

上线

     for i, row in enumerate(reader):

我想继续解析文件,跳过问题行。

【问题讨论】:

    标签: python exception-handling io


    【解决方案1】:

    for...reader 反复调用next(reader)。要在循环时拦截异常,请执行循环并自己进行下一个调用。未经测试:

    with open(fileIn, 'rb') as f:
        reader = csv.reader(f, delimiter='\t')
        i = -1
        while True:
            i += 1
            try:
                row = next(reader)
            except StopIteration:
                break
            except IOError:
                pass
            else:
                try:
                    # stuff
                except:
                    pass
    

    【讨论】:

      【解决方案2】:

      csv.reader 返回一个对象,该对象既可以遍历类似文件的迭代器,又可以在读取时处理它找到的内容。您有一个似乎无法恢复的 IOError。 (我说得对吗?)既然如此,您能做的最好的事情不是识别输入中的缺陷吗? Pedro Ghilardi 在reading csv file without for 提出了这样做的建议。

      【讨论】:

      • 输入是一个超过 100 GB 的文件,因此最好确保解析它的代码是健壮的。该链接很有帮助,谢谢。
      猜你喜欢
      • 2022-11-25
      • 1970-01-01
      • 2018-05-18
      • 1970-01-01
      • 1970-01-01
      • 2010-09-10
      • 2013-03-28
      • 1970-01-01
      • 2013-11-19
      相关资源
      最近更新 更多