gpt4 book ai didi

java - 捕获一些异常但忽略其他异常 - 为什么这不起作用?

转载 作者:行者123 更新时间:2023-11-29 10:07:38 25 4
gpt4 key购买 nike

我有类似的东西。

void func() {
try {
//socket disconnects in middle of ..parsing packet..
} catch(Exception ex) {
if(!ex.getMessage().toString().equals("timeout") || !ex.getMessage().toString().equals("Connection reset")) {
debug("Exception (run): " + ex.getMessage());
ex.printStackTrace();
}
}

为什么当我得到连接重置异常或超时异常时,它仍然进入条件。我试过没有 toString 并且没有运气。

最佳答案

你不应该捕获所有的异常,然后测试异常的错误信息。相反,只捕获您打算处理的那些异常 - 例如 SocketTimeoutException .

catch (SocketTimeoutException ex)
{
// Do something...
}

使用您当前的代码,您可能会捕捉到一些您没有预料到的其他类型的异常。目前你只会忽略这个异常,甚至不会记录它。这会使调试正在发生的事情变得非常困难。如果您有无法处理的异常,您应该重新抛出它或记录它。

I want to catch all exceptions

如果您真的想这样做,那么您可以按如下方式编写代码:

catch (SocketTimeoutException ex)
{
// Do something specific for SocketTimeoutException.
}
catch (Exception ex)
{
// Do something for all other types of exception.
}

关于你的具体错误,你写了:

!a.equals(b) || !a.equals(c)

此表达式的计算结果始终为真。你的意思是:

!a.equals(b) && !a.equals(c)

或等效地:

!(a.equals(b) || a.equals(c))

请注意,按照我上面的建议重写代码,您就可以完全避免编写这个复杂的 boolean 表达式。

关于java - 捕获一些异常但忽略其他异常 - 为什么这不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3542659/

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