首页 > 解决方案 > 在try中捕获异常后如何继续循环...除了

问题描述

我正在分块读取一个大文件,并且正在对每个块进行一些操作。在阅读其中一个获取它们时,我收到以下消息错误:

pandas.errors.ParserError:数据标记错误。C 错误:预期 15929977 行中有 26 个字段,看到 118

这意味着我的文件行之一与其他文件行的格式不同。我认为我能做的就是省略这块,但我找不到办法做到这一点。我试图做一个try/except块如下:

data = pd.read_table('ny_data_file.txt', sep=',', 
                      header=0, encoding = 'latin1', chunksize = 5000)
try: 
    for chunk in data:
           # operations
except pandas.errors.ParseError:
           # Here is my problem

我在这里写的是我的问题是,如果没有很好地解析块,我的代码将自动进入异常,甚至不进入 for 循环,但我想要的是跳过这个块并前进到下一个,我想在其上执行循环内的操作。

我检查了stackoverflow,但在for循环上执行尝试时找不到类似的东西。任何帮助,将不胜感激。

更新:

我已尝试按照评论中的建议进行操作:

try:
    for chunk in data:
        #operations
except pandas.errors.ParserError:
        # continue/pass/handle error

但仍然没有捕获异常,因为如上所述,异常是在从我的数据中获取 chyunk 时创建的,而不是在对其进行操作时创建的。

标签: pythonpython-3.xpandasfor-looptry-except

解决方案


如果在其中捕获异常,您使用的方式try - except会使其跳过整个 for 循环。如果您只想跳过一次迭代,则需要在循环内编写 try-except ,如下所示:

for chunk in data:
    try:
       # operations
    except pandas.errors.ParseError as e:
        # inform the user of the error
        print("Error encountered while parsing chunk {}".format(chunk))
        print(e)

推荐阅读