簡體   English   中英

在 python for 循環中,如何處理可以拋出異常的迭代器?

[英]In a python for loop, how do you handle an iterator that can throw exceptions?

我正在使用一個迭代器,即標准庫 CSV 閱讀器,它可以引發異常。 這是一個最小的工作代碼示例:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM