我在我的代码中使用 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/