gpt4 book ai didi

java - 在java中向上传播错误

转载 作者:搜寻专家 更新时间:2023-11-01 04:01:56 25 4
gpt4 key购买 nike

我有一个主类,里面有类似的东西

void FooBar(String s){

try {
parseString(s);
} catch (Exception e) {
e.printStackTrace();
System.err.println("Error: " + e.getMessage());
context.getCounter(Counters.ERROR).increment(1); // this increment doesnt increases
}
}

解析字符串是

void ParseString(String s){
if (matcher.matches()) {

} else {
//throw exception
try {
throw new Exception("bad formatted N-triples");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

但由于某种原因,错误没有向上传播。在我的 FooBar 方法中,即使函数获取格式错误的数据,错误计数器也不会递增。

如何向上传播此异常?

最佳答案

But for some reason, the error is not propagated upwards...

它没有向上传播的原因是你捕获了它。异常在被捕获时停止传播。

要么不在 parseString 中捕获它,要么在处理程序中重新抛出它;例如e.printStackTrace();扔 e;


但是,这可能会让您遇到更多问题,特别是因为您在此处捕获/抛出异常。问题是 Exception 是所有已检查异常的根源:

  • 因为它是一个已检查的异常,方法parseString 必须声明它throw Exception 如果你想异常传播。

  • 但是 throws Exception 表示此方法可能会抛出任何可能的已检查异常……这让调用者的日子不好过。 (不是在这个例子中……而是在一般情况下。)

我的建议如下:

  • 避免创建/抛出 Exception。选择一个更具体的(已检查或未检查的)异常来反射(reflect)您试图报告的“异常事件”的含义……或实现您自己的异常类。在这种情况下,抛出 IllegalArgumentException 可能会更好,尽管这是一个未经检查的异常。

  • 避免需要传播 Exception 的情况。

  • 捕获Exception 时要小心。它捕获每个(非Error)异常,包括所有未检查的异常;即 RuntimeExecption 及其子类。

关于java - 在java中向上传播错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18905974/

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