Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在try中捕获异常后继续循环。。。除了_Python_Python 3.x_Pandas_For Loop_Try Except - Fatal编程技术网

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

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=',',

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

pandas.errors.ParserError:标记数据时出错。C错误:第15929977行预期有26个字段,saw 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的地方。任何帮助都将不胜感激

更新:

我已尝试按照评论中的建议:

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-不是真的。。。