Gre*_*reg 44 python java exception
我如何尝试除了Java中的其他内容,就像在Python中一样?
例:
try:
something()
except SomethingException,err:
print 'error'
else:
print 'succeeded'
Run Code Online (Sandbox Code Playgroud)
我看到尝试和捕获提到但没有别的.
Rya*_*che 27
我并不完全相信我喜欢它,但这相当于Python的其他内容.它消除了将成功代码放在try块末尾的问题.
bool success = true;
try {
something();
} catch (Exception e) {
success = false;
// other exception handling
}
if (success) {
// equivalent of Python else goes here
}
Run Code Online (Sandbox Code Playgroud)
那这个呢?
try {
something();
} catch (Exception e) {
// exception handling
return;
}
// equivalent of Python else goes here
Run Code Online (Sandbox Code Playgroud)
当然,在某些情况下,您想在try / catch / else之后放置更多代码,而该解决方案不适合该解决方案,但如果它是方法中唯一的try / catch块,则它可以工作。
虽然Ryan用布尔值跟踪错误的答案很好,但我认为在这种情况下使用“逻辑块”来“向前跳”会更好。
在 Java 中,您可以使用<optional-label-name followed by ':'>{...}
它们创建任意上下文块(范围)并为其分配标签。你可以打电话break <labelname>;
这是我的意思的一个例子,你可以玩一下:
private static void trycatchelsetest(boolean err) {
myLogicBlock: {
try {
System.out.println("TRY");
{ //unlabeled block for demonstration
if(err)
throw new IOException("HELLO!");
}
} catch(IOException e) {
System.out.println("CATCH");
break myLogicBlock;
} finally {
System.out.println("FINALLY");
}
System.out.println("ELSE");
}
System.out.println("END");
}
Run Code Online (Sandbox Code Playgroud)
Try 没有 else 的原因是因为它旨在捕获特定代码块中的特定错误,该错误要么被处理(通常通过设置默认值或返回),要么冒泡(并且仅提供给finally
使确保资源不会因为中断而泄漏,即使您中断了)。在上面的中断示例中,我们通过跳过因错误而不再相关的代码块(跳到下一个逻辑步骤)来处理异常。Ryan 的布尔示例通过记录发生的错误来处理它,并让代码的后半部分对错误发生后的情况做出反应。
我认为逻辑块比布尔方法更好(只要你没有基于抛出的错误的复杂逻辑),因为它不需要读者知道整个函数来理解发生了什么。他们看到break <labelname>;
并知道程序将有效地跳到该块的末尾。布尔值要求程序员跟踪对其做出决策的所有内容。
显然,“向前跳”和布尔跟踪各有其优点,并且通常更多地是一种风格选择。
归档时间: |
|
查看次数: |
16847 次 |
最近记录: |