Python - 如何让循环在 Try Catch 之后继续?
Python - how to make loop continue after Try Catch?
我有以下 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"
将 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"
手动迭代,希望csvreader对象能从异常中恢复:
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")
当 csv.reader
对象到达文件末尾时引发 StopIteration
异常。此时使用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 作为奖励)
我有以下 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"
将 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"
手动迭代,希望csvreader对象能从异常中恢复:
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")
当 csv.reader
对象到达文件末尾时引发 StopIteration
异常。此时使用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 作为奖励)