在try中捕获异常后如何继续循环...除了

时间:2018-09-17 09:28:57

标签: python python-3.x pandas for-loop try-except

我正在逐块读取一个大文件,并且正在对每个块进行一些操作。读取其中之一时,出现以下消息错误:

  

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而不是对其进行操作时创建的。

4 个答案:

答案 0 :(得分:1)

我了解到,在操作部分您会获得例外。如果是这样:您应该继续:

for chunk in data:
    try:
       # operations
    except pandas.errors.ParseError:
       # continue

答案 1 :(得分:1)

使用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)

答案 2 :(得分:1)

我不确定在哪里引发异常。也许添加一个完整的错误堆栈会有所帮助。如果该错误是由read_table()调用引发的,则可以尝试以下操作:

try: 
    data = pd.read_table('ny_data_file.txt', sep=',', 
                      header=0, encoding = 'latin1', chunksize = 5000)

except pandas.errors.ParseError:
           pass
for chunk in data:
           # operations

答案 3 :(得分:0)

@JonClements的建议解决了我的问题,就是在error_bad_lines=False中使用pd.read_csv,因此它跳过了引起麻烦的行,并让我执行了其余的for循环。

相关问题