Python-在尝试捕获后如何使循环继续?

时间:2019-01-25 19:33:40

标签: python next skip continue

我有以下python代码,它可以正常工作,但是会带来错误,然后跳转到最后一行。
然后,我从文件中删除有问题的行,再次运行python脚本,但它再次找到有问题的行并跳到最后。
我希望能够打印所有行而无需跳转到python脚本的末尾(只需跳过行并继续到下一个):

import csv
with open('data.tsv', "rb") as f:
    reader = csv.reader( f )

    try:
        for row in reader:
            continue
    except csv.Error, e:
        print reader.line_num, e
        pass
print "End of file!\n"

2 个答案:

答案 0 :(得分:5)

手动迭代,希望csv阅读器对象可以从异常中恢复:

import csv
with open('data.tsv', "r") as f:
    reader = csv.reader( f )

    while True:
        try:
           row = next(reader)
           print(row)
        except csv.Error as e:
           print("line: {}, error: {}".format(reader.line_num, e))
        except StopIteration:
            break
    print("End of file!\n")

StopIteration对象到达文件末尾时,将引发csv.reader异常。此时,break用于退出无限循环。

让我们通过在一行中插入一个NULL字节来进行测试。一种简单的方法是将f替换为行列表:

data = """hello,world
foo,bar
hi\x00,I'm joe
recovered,yeah
"""

f = data.splitlines()

现在f可以通过上面的代码馈送到csv.reader(删除with块)。注意在第三行插入的NUL字节。输出:

['hello', 'world']
['foo', 'bar']
line: 3, error: line contains NULL byte
['recovered', 'yeah']
End of file!
是的!它有效(并且代码与Python 2和Python 3兼容)作为奖励

答案 1 :(得分:-1)

try移动到for循环内

import csv
with open('data.tsv', "rb") as f:
    reader = csv.reader( f )
for row in reader:
    try:
            continue
    except csv.Error, e:
        print reader.line_num, e
        pass
print "End of file!\n"