06_Dart异常处理
2019獨(dú)角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>
Exceptions
你的Dart代碼可以拋出和捕獲異常。異常是指程序執(zhí)行中發(fā)生的意料之外的錯(cuò)誤。如果沒有捕獲異常,引發(fā)異常的隔離程序?qū)⒈粧炱?#xff0c;通常隔離程序及其程序?qū)⒈唤K止。
與Java相反,Dart的所有異常都是未檢查的異常。方法不聲明它們可能拋出哪些異常,也不要求您捕獲任何異常。
Dart提供Exception和Error類型,以及許多預(yù)定義的子類型。當(dāng)然你可以自己定義異常。但是,Dart程序可以拋出任何非空對(duì)象不僅僅是異常和錯(cuò)誤對(duì)象。
Throw
這里有一個(gè)拋出或掛起異常的例子:
throw FormatException('Expected at least 1 section');你也可以拋出任意對(duì)象:
throw 'Out of llamas!';注意:在正式使用中通常拋出的是實(shí)現(xiàn)了Error或Exception類型的對(duì)象;
因?yàn)閽伋霎惓J且粋€(gè) 表達(dá)式 ,您可以在=>語句中拋出異常,也可以在任何允許表達(dá)式的地方拋出異常:
void distanceTo(Point other) => throw UnimplementedError();Catch
捕獲異常將阻止異常傳播(除非重新拋出異常)。捕獲異常后我們可以去判斷并處理相應(yīng)的異常。
try {breedMoreLlamas(); } on OutOfLlamasException {buyMoreLlamas(); }要處理可以拋出多種異常類型的代碼,可以指定多個(gè)catch子句。與拋出對(duì)象的類型匹配的第一個(gè)catch子句處理異常。如果catch子句沒有指定類型,則該子句可以處理任何類型的拋出對(duì)象:
try {breedMoreLlamas(); } on OutOfLlamasException {// A specific exceptionbuyMoreLlamas(); } on Exception catch (e) {// Anything else that is an exceptionprint('Unknown exception: $e'); } catch (e) {// No specified type, handles allprint('Something really unknown: $e'); }正如前面的代碼所示,您可以使用on或catch或both。在需要指定異常類型時(shí)使用。當(dāng)您的異常處理程序需要異常對(duì)象時(shí),請(qǐng)使用catch。
可以指定catch()的一個(gè)或兩個(gè)參數(shù)。第一個(gè)是拋出的異常,第二個(gè)是堆棧跟蹤(StackTrace對(duì)象)。
try {// ··· } on Exception catch (e) {print('Exception details:\n $e'); } catch (e, s) {print('Exception details:\n $e');print('Stack trace:\n $s'); }要在捕獲中處理異常,同時(shí)允許其繼續(xù)傳播,請(qǐng)使用rethrow關(guān)鍵字。
void misbehave() {try {dynamic foo = true;print(foo++); // Runtime error} catch (e) {print('misbehave() partially handled ${e.runtimeType}.');rethrow; // Allow callers to see the exception.} }void main() {try {misbehave();} catch (e) {print('main() finished handling ${e.runtimeType}.');} }Finally
要確保在拋出異常時(shí)運(yùn)行某些業(yè)務(wù)代碼,請(qǐng)使用finally子句。如果沒有catch子句匹配異常,則在finally子句運(yùn)行后傳播異常:
try {breedMoreLlamas(); } finally {// Always clean up, even if an exception is thrown.cleanLlamaStalls(); }finally子句在所有匹配到的catch子句之后運(yùn)行:
try {breedMoreLlamas(); } catch (e) {print('Error: $e'); // Handle the exception first. } finally {cleanLlamaStalls(); // Then clean up. }轉(zhuǎn)載于:https://my.oschina.net/wecnlove/blog/3011214
總結(jié)
以上是生活随笔為你收集整理的06_Dart异常处理的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: js编程
- 下一篇: 用户案例 - 3Cs