猿问

如何在单个 catch 块中处理所有 java.net 异常?

我正在尝试处理作为 java.net 包一部分的异常。我浏览了文档,看到了属于该包的 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");

}

尝试此操作后,我收到以下错误消息

无法解析类 java.net.Exception

如何捕获 java.net 异常?


HUH函数
浏览 122回答 4
4回答

翻过高山走不出你

java.net.Exception不存在,您不能以这种方式从特定包中捕获类的异常。考虑到网络异常总是从开始java.net也是错误的。一些网络异常不是由异常开始的java.net,异常也可以被另一个异常包裹。例如java.net.SocketException可以由java.lang.IllegalStateException.你不会处理它,因为那不是java.net例外。使用 looks处理异常instanceOf也无济于事。在子句中指定一个特定的例外catch就足够了。另请注意,异常是不言自明的,并且应该在其状态中包含所有相关信息:您不需要像您那样将异常映射到文本消息。您要发送/记录的内容是利用与之关联的异常类/消息/原因/stracktrace。您所做的只是解释容易出错的异常含义。这样做:catch(Exception e){    sendException(e); }public void sendException(Exception e){   // exploit e.getClass(), e.getMessage() or e.getStackTrace()   ...}请注意,在某些情况下,您希望捕获一些特定的异常,因为您对它们有特定的处理:catch(WebDriverException e){     processWebDriverException(e);}catch(Exception e){     processAnyOtherException(e);}

www说

首先,你抓不到的原因java.net.Exception。该Exception课程在 中java.lang,这不是您应该捕捉的异常。那你应该抓什么呢?不幸的是,没有适合所有网络异常的超类型,也没有非网络异常。但事实证明,大多数网络异常都有java.io.IOException一个祖先。(有一个java.net.*异常不是源自IOException; 即java.net.URISyntaxException。但这是一个未经检查的异常,并不表示存在“网络问题”。)所以一种方法是捕捉IOException. 您可以通过使用反射来获取异常类的包名称来进一步完善它(请参阅https://stackoverflow.com/a/57002571/139985);例如} catch (org.openqa.selenium.WebDriverException e) {    sendException("Problem is with the selenium web driver");} catch (IOException e) {    if (e.getClass().getPackage().startsWith("java.net"))        sendException("There is some problem with the network");    else {        throw e;  // Or diagnose differently    }}

SMILET

java.net.Exception 不存在,java.lang.Exception 存在。要检查包是否为 java.net,请使用 e.getClass().getPackage():catch(Exception e){    if(e instanceof org.openqa.selenium.WebDriverException)        sendException("Problem is with the selenium web driver");    else if(e.getClass().getPackage().startsWith("java.net"))        sendException("There is some problem with the network");}

慕田峪9158850

您可以像这样捕获 java.net 异常:try {}catch (    BindException     | ConnectException     | HttpRetryException    | MalformedURLException    | NoRouteToHostException    | PortUnreachableException    | ProtocolException    | SocketException    | SocketTimeoutException    | UnknownHostException    | UnknownServiceException    | URISyntaxException    e){    // do stuff with e}但是,如果您要调用instanceofafter 以不同方式处理每个异常,那有什么意义呢?在这种情况下,您应该使用不同的 catch 块。
随时随地看视频慕课网APP

相关分类

Java
我要回答