python - 如何在异常中打印有问题的行

标签 python pandas

我在我的代码中使用 Pandas,并使用以下代码操作一些数据框:

def exit(exitCode, errorMsg=None, monitor_thread=None):
   if exitCode is not None:
       logger.error(errorMsg)
       logger.error(traceback.format_exc())
   sys.exit(exitCode)

try:
    results['name'] = results['name'].astype(float).astype(int)
except Exception as e:  # catch *all* exceptions
    exit("Failed to convert name" + str(e), 8)

我收到这个错误:

Traceback (most recent call last):

File "DIST\FDmanInfo.py", line 206, in

File "DIST\FDmanInfo.py", line 191, in main

File "\local\Python\lib\site-packages\pandas\core\generic.py", line 3054, in astype raise_on_error=raise_on_error, **kwargs)

File "\local\Python\lib\site-packages\pandas\core\internals.py", line 3189, in astype

return self.apply('astype', dtype=dtype, **kwargs)

File "\local\Python\lib\site-packages\pandas\core\internals.py", line 3056, in apply applied = getattr(b, f)(**kwargs)

File "\local\Python\lib\site-packages\pandas\core\internals.py", line 461, in astype values=values, **kwargs)

File "\local\Python\lib\site-packages\pandas\core\internals.py", line 504, in _astype values = _astype_nansafe(values.ravel(), dtype, copy=True)

File "\local\Python\lib\site-packages\pandas\types\cast.py", line 531, in _astype_nansafe raise ValueError('Cannot convert NA to integer') ValueError: Cannot convert NA to integer

我想知道是哪一行出了问题,但我无法在任何地方找到如何在异常情况下将它(行)打印到日志中,就像输入数据框一样:

name

0 1.0

1 NaN

2 3.0

3 4.0

我希望它在失败的行上打印,在本例中为“1 NaN”, 有可能吗?

谢谢,

最佳答案

您可以使用内置的 Python 库,traceback

import traceback
try:
    results['name'] = results['name'].astype(float).astype(int)
except Exception as e:  # catch *all* exceptions
    tb = traceback.format_exc()
    print(tb)
    exit("Failed to convert name" + str(e), 8)

def exit(exitCode, errorMsg=None, monitor_thread=None):
   if exitCode is not None:
       logger.error(errorMsg)
       logger.error(traceback.format_exc())
   sys.exit(exitCode)

更新 检查回溯如何工作的简单示例:

import traceback

try:
    a = [] + None
except Exception as e:
    tb = traceback.format_exc()
    print(tb)
    exit("Failed to convert name" + str(e))


def exit(exitCode):
    print(exitCode)
    print(traceback.format_exc())

关于python - 如何在异常中打印有问题的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51916233/

相关文章:

python - 如何拆分和连接 Pandas 数据框

python - Pandas Dataframe 性能与列表性能

python - 如何在 Tkinter 中移动 Canvas 内的文本

python - 如何使用 2D 蒙版过滤 3D 阵列

python - 如何根据一列的先前值和另一列的当前值计算列

python - 用 Pandas Dataframes 中的平均值前向填充 NA

Python - Pandas、滚动平均值和困难的 Groupby 通用 ID 以及一些选择参数

python - ''tuple unpacking is not supported in Python3' ' 错误

python - numpy.linalg.det 的时间复杂度是多少?

python - 如何使用 Pandas 仅用空字符串替换无?