获取熊猫错误消息/异常的值

问题描述 投票:0回答:2

我有一个错误的csv数据框,并且行错了。 Pandas引发带有行号的错误消息。是否可以获取此号码以用作除外?

这里显示错误消息:

pandas.errors.ParserError: Expected 187 fields in line 55898, saw 188. Error could possibly be due to quotes being ignored when a multi-char delimiter is used.

我想获得这一行(55898),将其写入单独的日志文件中,然后再将其删除。同时获得“期望的”数字(187)和“看到的”数字(188)也很好。这样我就可以在日志文件中写了:

Error at line 55898. Fields added : 1
python pandas parsing
2个回答
1
投票

使用repr获取错误字符串,并使用re消除错误。

import re

try:
   <code that raises exception>
except pandas.errors.ParserError as e:
   errorstring = repr(e)
   matchre = re.compile('Expected (\d+) fields in line (\d+), saw (\d+)')
   (expected, line, saw) = map(int, matchre.search(errorstring).groups())
   with open('error.log', "a+") as log:
      log.write(f'Error at line {line}. Fields added : {saw - expected}.')

0
投票

首先,pandas.errors.ParserError只是一个奇特的ValueErrorsee source)。

剩下的是将其包装到try-except块中,str()例外:

import pandas as pd

try: 
    pd.read_csv('bad.csv')
except pd.errors.ParserError as e:
    msg = str(e)
    # Extract numbers and reformat the message for your needs.

[没有其他方法,因为熊猫生成消息并将消息作为str传递到ParserError

© www.soinside.com 2019 - 2024. All rights reserved.