当前位置: 首页 > 知识库问答 >
问题:

如何异常打印有问题的行

杭英杰
2023-03-14

我在代码中使用熊猫,同时使用下面的代码处理一些数据帧:

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(最近的调用最后):

文件“DIST\FDmanInfo.py”,第206行,在

文件“DIST\FDmanInfo.py”,主目录第191行

文件“\local\Python\lib\site packages\pandas\core\generic.py”,第3054行,在astype raise\u on\u error=raise\u on\u error中,**kwargs)

文件“\local\Python\lib\site packages\pandas\core\internals.py”,第3189行,astype格式

回归自我。应用('astype',dtype=dtype,**kwargs)

文件\本地\Python\lib\site-包\熊猫\core\internals.py,第3056行,在应用=getattr(b, f)(**kwargs)中

文件“\local\Python\lib\site packages\pandas\core\internals.py”,第461行,astype values=values,**kwargs)

文件“\local\Python\lib\site packages\pandas\core\internals.py”,第504行,在_astypevalues=_astype\u nansafe(values.ravel(),dtype,copy=True)中

文件"\本地\Python\lib\site-包\熊猫\类型\cast.py",第531行,在_astype_nansafe引发ValueError('不能将NA转换为整数')ValueError:不能将NA转换为整数

我想知道是哪一行出了问题,但我找不到在异常情况下如何将其(该行)打印到日志中,就像输入数据帧是:

name

0 1.0

1楠

2 3.0

3 4.0

我想让它在失败的行上打印,在这种情况下是“1 NaN”,这可能吗?

谢谢

共有2个答案

景嘉实
2023-03-14

@argo的回答建议您如何调整当前代码。

然而,对于熊猫,您可以简单地列出未转换的值。诀窍是使用pd.to_numeric,它有额外的选项,而不是pd。series.astype。

例如:

s = pd.to_numeric(results['name'], errors='coerce').astype(int)
failed = results['name'].loc[s.isnull()]

墨高杰
2023-03-14

你可以使用内置的python库,回溯

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())
 类似资料:
  • 我正在开发通过蓝牙与打印机连接并打印一些文本的应用程序。我可以通过蓝牙连接打印机,然后从BluetoothSocket获取输出流并写一些文本。但它不会用打印机打印任何东西...我仔细检查过,没有例外。请帮帮我我在代码中做错了什么???我使用佳能MX430打印机进行测试...这是我的代码

  • Go 语言中提供了两种创建异常信息的方式 方式一:通过 fmt 包中的 Errorf 函数创建错误信息,然后打印 package main import "fmt" func main() { // 1.创建错误信息 var err error = fmt.Errorf("这里是错误信息") // 2.打印错误信息 fmt.Println(err) // 这里是错误信息 }

  • 我使用的是Selenium3.9.0+Geckodriver0.24+Firefox58.0.2。 当webdriver想要在我的目标站点上单击导航树中的元素时->script crashing with selenium异常:“selenium.Common.Exceptions.ElementClickInterceptedException:Message:element is not cl

  • 问题内容: 如何将异常的堆栈跟踪信息打印到stderr以外的流上?我发现的一种方法是使用getStackTrace()并将整个列表打印到流中。 问题答案: 可以接受or或参数: 也就是说,请考虑将SLF4J之类的记录器接口与LOGBack或log4j之类的记录实现一起使用。

  • html 代码如上, 我的打印纸张宽度是 176mm, 但是因为我设置了 child2 left:500mm 导致我的纸张被缩放了 理想情况 用 js 的话 我需要判断内部的内容 是否溢出,然后再设置 display:none 如何用 css 去从根节点解决这种问题?

  • 线程"main"中的异常java.lang.NumberFormatException:对于输入字符串:"a" 如何访问导致NumberFormatException以这种形式打印自定义错误消息的输入字符串: 那我应该得到: 这不是一个数字:a