Python 如何在try中捕获异常后继续循环。。。除了
我正在分块阅读一个大文件,并对每个块进行一些操作。在阅读其中一个get时,我出现以下消息错误: pandas.errors.ParserError:标记数据时出错。C错误:第15929977行预期有26个字段,saw 118 这意味着我的一个文件行与其他文件行的格式不同。我想我能做的就是省略这一块,但我找不到方法来做。我尝试执行Python 如何在try中捕获异常后继续循环。。。除了,python,python-3.x,pandas,for-loop,try-except,Python,Python 3.x,Pandas,For Loop,Try Except,我正在分块阅读一个大文件,并对每个块进行一些操作。在阅读其中一个get时,我出现以下消息错误: pandas.errors.ParserError:标记数据时出错。C错误:第15929977行预期有26个字段,saw 118 这意味着我的一个文件行与其他文件行的格式不同。我想我能做的就是省略这一块,但我找不到方法来做。我尝试执行try/except块,如下所示: data = pd.read_table('ny_data_file.txt', sep=',',
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的地方。任何帮助都将不胜感激
更新:
我已尝试按照评论中的建议:
try:
for chunk in data:
#operations
except pandas.errors.ParserError:
# continue/pass/handle error
但是仍然没有处理异常,因为正如前面所说,异常是在从我的数据中获取chyunk时创建的,而不是在使用它进行操作时创建的。我理解,在操作部分,您会得到异常。如果是这样的话:你应该继续:
for chunk in data:
try:
# operations
except pandas.errors.ParseError:
# continue
如果捕获到异常,则使用
try-except
的方法会跳过整个for循环。如果只想跳过一次迭代,则需要在循环内编写try,如下所示:
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)
我不确定异常被抛出到哪里。也许添加一个完整的错误堆栈会有所帮助。如果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
正如@JonClements所建议的,解决我的问题的方法是在
pd.read\u csv
中使用error\u bad\u lines=False
,因此它跳过了导致问题的行,让我执行for循环的其余部分。I在读取数据块时出现异常。如果我尝试在for循环后调试代码,代码甚至不会进入for循环,因为问题出在for循环中,而不是在所做的操作中。@Marisa:如果在获取块时出错,则无法继续循环到下一个块。即使是下一个块也不能?只是省略了那一个?@Marisa:如果有错误,它怎么能这样做?因为chunk i-th会有错误,但chunk(i+1)-th不会。问题是我在循环中得到了异常,而不是在循环中。噢,就像对于数据中的chunk
本身就是错误的一行?不是#操作的内容
?如果跳过异常处理并传递错误_bad_lines=True
,会发生什么情况?这是否会挽救足够有用的行?由于您有sep=”,“
-您确定不应该使用pd。请在此处阅读\u csv
,以防问题是您在列中嵌入了引号?我确实在列中嵌入了引号error\u bad\u lines=True
应该作为pd的参数。read\u csv
?抱歉,我的意思是在引用的列中嵌入逗号,但是是的-可能值得尝试一下,看看是否有帮助。它仍然提供panda.erros.parserrorror抱歉使用False-不是真的。。。