如何在读取文件行时处理异常?

时间:2016-11-10 16:17:27

标签: python exception-handling io

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

例如,假设我有这个块:

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):

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

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

csv.reader 返回一个对象,该对象都迭代通过类似文件的迭代器并处理它在读取时找到的内容。您有一个看似无法恢复的IOError。 (我是对的吗?)既然如此,你能做的最好的事情就是找出输入中的缺陷吗? Pedro Ghilardi建议在reading csv file without for做这件事。