Python 捕获异常后继续循环

Python 捕获异常后继续循环,python,for-loop,iterator,Python,For Loop,Iterator,我正在通过csv.DictReader读取一个大(2Gb)文件(了解它的重要性)。文件深处的某个地方存在编码问题,我得到一个UnicodeDecodeError。查看错误消息,我发现在我的for循环中的隐式\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu中出现了错误 代码存根将如下所示: 导入csv 将open(“myfile.csv”,newline=“”)作为f: c=csv.DictReader(f) 对于c中的行:#这里发生了错误 通过 我想使用t

我正在通过
csv.DictReader
读取一个大(2Gb)文件(了解它的重要性)。文件深处的某个地方存在编码问题,我得到一个
UnicodeDecodeError
。查看错误消息,我发现在我的
for
循环中的隐式
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
中出现了错误

代码存根将如下所示:

导入csv
将open(“myfile.csv”,newline=“”)作为f:
c=csv.DictReader(f)
对于c中的行:#这里发生了错误
通过
我想使用
try-except
模式捕获任何读取错误,记录有意义的消息并继续读取文件

我怎样才能做到这一点?我不能在循环外使用
continue
(即在
块中,除了
之外),因此我想我需要重写
for
循环,以便不使用隐式形式,而是显式形式,但由于我对python相当陌生,我不知道如何以最具python风格的方式来实现这一点


要模拟错误,请查看以下玩具示例:

类My迭代器:
定义初始化(自我,mclass):
自我。_mclass=mclass
自身指数=0
定义下一个(自我):
如果self.\u index==3:
#模拟文件读取中的错误
自身指数+=1
引发异常(“模拟错误”
elif自身指数<5:
自身指数+=1
返回自.\u索引-1
#迭代结束
提出停止迭代
类别MyClass:
定义(自我):
返回我的迭代器(self)
obj=MyClass()
尝试:
对于obj中的结果:
打印(结果)
例外情况除外,如e:
打印(“包含例外情况”)
##由于明显的原因不起作用:
#继续

将对象包装在iter中,然后在while循环中调用next

done = False
obj = iter(MyClass())
while not done:
    try:
        data = next(obj)
    except StopIteration:
        done = True
    except Exception:
         print("process error here and continue")

你使用的是什么python版本? 还有为什么不使用收益率(参见)


您可以返回而不是提升。如果您知道If类型(变量)异常是您可以处理信息的。

只是为了记录,您可以将
errors
参数传递给
open
,该参数指示如何正确处理编解码器错误。

try…except
放在循环中,而不是试图捕捉
next
中的错误。请等待,注意,该参数没有正确读取。I如果你可以继续循环,它怎么知道从哪里开始再次读取?从文件中发生异常的地方开始只会引发另一个异常。嗯,我认为这一行中出现了错误
对于c:
中的行,
会尝试
捕捉到它是否在循环中吗?是的,异常实际上是thrown对于知道如何解决这个问题至关重要。好吧,那么在这种情况下,在发生IO错误的情况下跳过行的正常模式是什么?查看接受的结果:对于obj中的结果:
如果类型(结果)是异常:打印(结果)继续
你读了我的问题吗?在我的真实案例中,我使用的是
DictReader
,因此我无法控制函数返回或产生的内容。我看到了模拟错误的代码…并没有想到会发生错误…很抱歉,但真诚地说,在探索网络以解决你的问题之后…我的想法是放弃它DictReader、、和使您的自定义类…对于csv来说,性能影响不大,它将更易于“读取”,您将对错误有更多的控制。解决方案产量将减少代码的大小…使其更容易…而且…您只需将