在 python for 循环中,如何处理可以抛出异常的迭代器?
In a python for loop, how do you handle an iterator that can throw exceptions?
我正在使用迭代器,即标准库 CSV reader,它可以抛出异常。这是一个最小的工作代码示例:
import csv
import sys
csv.field_size_limit(10_000_000)
reader = csv.reader(sys.stdin)
for row in reader:
pass
这是我 运行 时发生的事情:
[joel@vm all_recent]$ python dummy_csv.py < mycsv.csv
Traceback (most recent call last):
File "/path/dummy_csv.py", line 7, in <module>
for row in reader:
File "/usr/lib64/python3.10/codecs.py", line 322, in decode
(result, consumed) = self._buffer_decode(data, self.errors, final)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x80 in position 264: invalid start byte
我希望能够做的是记录异常,然后继续迭代。执行此操作的 pythonic 方法是什么?
您可以手动从迭代器中提取元素,而不是 for
循环为您提取元素。
reader = csv.reader(sys.stdin)
it = iter(reader)
while True:
try:
next(it)
except StopIteration:
break
except Exception:
# do something
我正在使用迭代器,即标准库 CSV reader,它可以抛出异常。这是一个最小的工作代码示例:
import csv
import sys
csv.field_size_limit(10_000_000)
reader = csv.reader(sys.stdin)
for row in reader:
pass
这是我 运行 时发生的事情:
[joel@vm all_recent]$ python dummy_csv.py < mycsv.csv
Traceback (most recent call last):
File "/path/dummy_csv.py", line 7, in <module>
for row in reader:
File "/usr/lib64/python3.10/codecs.py", line 322, in decode
(result, consumed) = self._buffer_decode(data, self.errors, final)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x80 in position 264: invalid start byte
我希望能够做的是记录异常,然后继续迭代。执行此操作的 pythonic 方法是什么?
您可以手动从迭代器中提取元素,而不是 for
循环为您提取元素。
reader = csv.reader(sys.stdin)
it = iter(reader)
while True:
try:
next(it)
except StopIteration:
break
except Exception:
# do something