【发布时间】:2016-01-16 00:04:33
【问题描述】:
在 try 块中,我想执行两个函数。如果第一个失败,则不要执行第二个。我还想打印出哪个功能失败了。
参见下面的代码。
try {
a = func1();
b = func2(); //won't execute if a failed
}
catch (Exception e) {
//TODO: print a or b failed?
}
语言是否自然支持这种情况?
如果不是,以下是一种好的做法吗? (我想不出有什么问题。但这让我很担心,因为我不记得在catch 中看到有人使用return。)
try {
a = func1();
}
catch {
//print: a failed
return; //if a failed then skip the execution of b
}
try {
b = func2();
}
catch {
//print: b failed
}
编辑: cmets总结:
-
从两种方法中抛出不同的异常。
- 在这种情况下,方法是由其他人编写的,我无法控制。
-
e.printStackTrace() 将打印行号和函数
- 我想做的不仅仅是打印。更像是,如果失败,则执行以下代码。
【问题讨论】:
-
e.printStackTrace()获取堆栈跟踪。或者从这两种方法中抛出不同的异常。 -
这甚至无法编译。
-
使用 slf4j 记录器记录您的代码。你会在 stacktrace 中看到类和方法被抛出异常。
-
使用第二个变体,在
catch中没有return- 通常是个坏主意。或者,从您的方法中抛出不同的异常。 -
堆栈跟踪已经有行号和失败的函数。你想做哪些它还没有做的事情?