4 回答
TA贡献1875条经验 获得超3个赞
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);
}
TA贡献1775条经验 获得超8个赞
首先,你抓不到的原因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
}
}
TA贡献1796条经验 获得超4个赞
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");
}
TA贡献1794条经验 获得超7个赞
您可以像这样捕获 java.net 异常:
try {
}
catch (
BindException
| ConnectException
| HttpRetryException
| MalformedURLException
| NoRouteToHostException
| PortUnreachableException
| ProtocolException
| SocketException
| SocketTimeoutException
| UnknownHostException
| UnknownServiceException
| URISyntaxException
e
){
// do stuff with e
}
但是,如果您要调用instanceofafter 以不同方式处理每个异常,那有什么意义呢?
在这种情况下,您应该使用不同的 catch 块。
添加回答
举报