gpt4 book ai didi

java - 打印Java异常中的所有变量?

转载 作者:行者123 更新时间:2023-12-02 09:06:25 26 4
gpt4 key购买 nike

背景:

我经常在 Apache Spark 上为 ETL 作业编写 Java 代码,通常在 Cloudera CDH 集群上设置每个数据源。我正在处理的数据通常是脏的。例如,对于邮政编码,我想我可以使用整数来表示它,但可能存在一些像“85281-281”这样的记录,我们无法将其解析为整数。因此,会引发异常,程序会因一堆堆栈跟踪而停止。

以前,我必须根据我的假设编写代码,在集群上运行它,但失败并出现大量堆栈跟踪。包括引发异常的行号。但找到根本原因确实很耗时,尤其是我不知道数据的具体行。

所以我认为:

  1. 发生错误时代码不应停止。这很容易,使用Java的异常处理系统可以轻松实现这一点。

  2. 我想知道当前堆栈中导致错误的变量内容,以便我可以找到输入的根本原因(输入中的特定行)。不仅仅是引发异常的行号。例如 NullPointerException,我想知道原始输入数据,输入文件中的哪个特定行导致了这种情况。

我们有 e.printStackTrace() 来显示堆栈跟踪中的所有函数调用。我们可以通过在当前堆栈顶部显示内容来做得更好吗?就像调试器一样吗?

当然,我会通过手工编码手动打印出所有变量。但我只想知道调试器是否可以使用特定函数来显示这些变量。

最佳答案

例如,如果您有以下代码

final String line = ... // get next line
processLine(line);

你可以将其转换为

final String line = ... // get next line
try {
processLine(line);
} catch (RuntimeException e) {
System.out.println(String.format("Oh no, an exception! The line was '%s'", line);
e.printStackTrace();

// ... any recovery logic
}

您不仅可以捕获 RuntimeException,还可以捕获其他异常。您还可以登录到某些记录器而不是控制台。

关于java - 打印Java异常中的所有变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42563102/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com