4 回答

TA貢獻1875條經(jīng)驗 獲得超3個贊
java.net.Exception不存在,您不能以這種方式從特定包中捕獲類的異常。
考慮到網(wǎng)絡(luò)異??偸菑拈_始java.net也是錯誤的。
一些網(wǎng)絡(luò)異常不是由異常開始的java.net,異常也可以被另一個異常包裹。例如java.net.SocketException可以由java.lang.IllegalStateException.
你不會處理它,因為那不是java.net例外。
使用 looks處理異常instanceOf也無濟于事。
在子句中指定一個特定的例外catch就足夠了。
另請注意,異常是不言自明的,并且應(yīng)該在其狀態(tài)中包含所有相關(guān)信息:您不需要像您那樣將異常映射到文本消息。
您要發(fā)送/記錄的內(nèi)容是利用與之關(guān)聯(lián)的異常類/消息/原因/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條經(jīng)驗 獲得超8個贊
首先,你抓不到的原因java.net.Exception。該Exception課程在 中java.lang,這不是您應(yīng)該捕捉的異常。
那你應(yīng)該抓什么呢?
不幸的是,沒有適合所有網(wǎng)絡(luò)異常的超類型,也沒有非網(wǎng)絡(luò)異常。但事實證明,大多數(shù)網(wǎng)絡(luò)異常都有java.io.IOException一個祖先。
(有一個java.net.*異常不是源自IOException; 即java.net.URISyntaxException。但這是一個未經(jīng)檢查的異常,并不表示存在“網(wǎng)絡(luò)問題”。)
所以一種方法是捕捉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條經(jīng)驗 獲得超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條經(jīng)驗 獲得超8個贊
您可以像這樣捕獲 java.net 異常:
try {
}
catch (
BindException
| ConnectException
| HttpRetryException
| MalformedURLException
| NoRouteToHostException
| PortUnreachableException
| ProtocolException
| SocketException
| SocketTimeoutException
| UnknownHostException
| UnknownServiceException
| URISyntaxException
e
){
// do stuff with e
}
但是,如果您要調(diào)用instanceofafter 以不同方式處理每個異常,那有什么意義呢?
在這種情況下,您應(yīng)該使用不同的 catch 塊。
添加回答
舉報