如何处理所有java代码。单个catch块中的net异常?
我试图处理作为java一部分的异常。net包。我浏览了documentation,看到了属于该包的12个异常,但找不到这些异常的父类
到目前为止,我尝试的是:
catch(Exception e)
{
if(e instanceof org.openqa.selenium.WebDriverException)
sendException("Problem is with the selenium web driver");
else if(e instanceof java.net.Exception) //I need help with this line
sendException("There is some problem with the network");
}
尝试此操作后,我收到以下错误消息
unable to resolve class java.net.Exception
我怎样才能抓住java。净例外
# 1 楼答案
如果没有公共超类,就无法在单个子句中捕获这些异常。你可能想看看这篇文章,但我同意你的看法,如果你必须指定12个例外情况,那就不太好了:
Can I catch multiple Java exceptions in the same catch clause?
# 2 楼答案
java.net.Exception
不存在,您无法通过这种方式从特定包捕获类的异常考虑到网络异常总是以
java.net
开头也是错误的一些网络异常不是以
java.net
开始的,异常也可以由另一个异常包装。例如java.net.SocketException
可以被java.lang.IllegalStateException
包装您不会处理它,因为这不是
java.net
异常用
instanceOf
处理异常看起来也没有什么帮助在
catch
子句中指定特定的异常就足够了还要注意,异常是自解释的,并且应该在其状态中包含所有相关信息:您不需要像这样将异常映射到文本消息
您想要发送/记录的是利用关联到的异常类/消息/原因/stracktrace。您所做的只是解释异常,这意味着很容易出错
那么就这样做吧:
请注意,在某些情况下,您希望捕获一些特定的异常,因为您对它们有特定的处理:
# 3 楼答案
爪哇。网不存在异常,java。例外
检查包是否为java。net,使用e.getClass()。getPackage():
# 4 楼答案
首先,你不能抓住
java.net.Exception
的原因。Exception
类位于java.lang
中,您不应该捕捉到异常那你该抓什么
不幸的是,没有适合所有网络异常和非网络异常的超类型。但事实证明,大多数网络例外都以
java.io.IOException
为祖先(有一个
java.net.*
异常不是从IOException
派生出来的,即java.net.URISyntaxException
。但这是一个未经检查的异常,并不表示“网络问题”。)因此,一种方法是抓住
IOException
。您可以通过使用反射来获取异常类的包名(请参见https://stackoverflow.com/a/57002571/139985),从而进一步完善这个过程;e、 g# 5 楼答案
# 6 楼答案
你可以学习java。净例外情况如下:
但是,如果要在之后调用
instanceof
以不同的方式处理每个异常,有什么意义呢在这种情况下,应使用不同的挡块