有没有办法在读取文件的特定行时处理异常?
例如,假设我有这个块:
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):
我想继续解析文件,跳过问题行。
答案 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做这件事。