2019独角兽企业重金招聘Python工程师标准>>>

Exceptions

你的Dart代码可以抛出和捕获异常。异常是指程序执行中发生的意料之外的错误。如果没有捕获异常,引发异常的隔离程序将被挂起,通常隔离程序及其程序将被终止。

与Java相反,Dart的所有异常都是未检查的异常。方法不声明它们可能抛出哪些异常,也不要求您捕获任何异常。

Dart提供Exception和Error类型,以及许多预定义的子类型。当然你可以自己定义异常。但是,Dart程序可以抛出任何非空对象不仅仅是异常和错误对象。

Throw

这里有一个抛出或挂起异常的例子:

throw FormatException('Expected at least 1 section');

你也可以抛出任意对象:

throw 'Out of llamas!';

注意:在正式使用中通常抛出的是实现了Error或Exception类型的对象;

因为抛出异常是一个 表达式 ,您可以在=>语句中抛出异常,也可以在任何允许表达式的地方抛出异常:

void distanceTo(Point other) => throw UnimplementedError();

Catch

捕获异常将阻止异常传播(除非重新抛出异常)。捕获异常后我们可以去判断并处理相应的异常。

try {breedMoreLlamas();
} on OutOfLlamasException {buyMoreLlamas();
}

要处理可以抛出多种异常类型的代码,可以指定多个catch子句。与抛出对象的类型匹配的第一个catch子句处理异常。如果catch子句没有指定类型,则该子句可以处理任何类型的抛出对象:

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。在需要指定异常类型时使用。当您的异常处理程序需要异常对象时,请使用catch。

可以指定catch()的一个或两个参数。第一个是抛出的异常,第二个是堆栈跟踪(StackTrace对象)。

try {// ···
} on Exception catch (e) {print('Exception details:\n $e');
} catch (e, s) {print('Exception details:\n $e');print('Stack trace:\n $s');
}

要在捕获中处理异常,同时允许其继续传播,请使用rethrow关键字。

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

要确保在抛出异常时运行某些业务代码,请使用finally子句。如果没有catch子句匹配异常,则在finally子句运行后传播异常:

try {breedMoreLlamas();
} finally {// Always clean up, even if an exception is thrown.cleanLlamaStalls();
}

finally子句在所有匹配到的catch子句之后运行:

try {breedMoreLlamas();
} catch (e) {print('Error: $e'); // Handle the exception first.
} finally {cleanLlamaStalls(); // Then clean up.
}

转载于:https://my.oschina.net/wecnlove/blog/3011214

06_Dart异常处理相关推荐

  1. Go语言的错误异常处理机制及其应用

    一.背景 在日常编写golang程序或阅读别人的golang代码时,我们总会看到如下的一堆代码块: xx, err = func(xx) if err != nil {//do sth. to tac ...

  2. SpringBoot (二) :全局异常处理设置

    说在前面 在spring 3.2中,新增了@ControllerAdvice 注解,可以用于定义@ExceptionHandler.@InitBinder.@ModelAttribute,并应用到所有 ...

  3. 2021年大数据常用语言Scala(三十四):scala高级用法 异常处理

    目录 异常处理 捕获异常 抛出异常 异常处理 Scala中 无需在方法上声明异常 来看看下面一段代码. def main(args: Array[String]): Unit = {val i = 1 ...

  4. Java基础(七)--Exception异常处理

    发现错误的理想时机是程序运行之前(编译期),然后不太现实,很多异常无法被发现(特别是业务上的数据),需要在运行时解决. 错误恢复机制保证代码健壮性的方式,异常处理在程序中很常见,也是必须的,必须考虑有 ...

  5. 零基础学习python_异常处理(32-33课)

    我们写完python执行的时候是不是经常会遇到报错,而且报错都是大片红字,这样给别人的感受就是你写的程序怎么老是出问题啊,这样我们还咋么混下去呢?于是乎,就有了异常处理的东东. python的try语 ...

  6. Spring Security 实战干货:自定义异常处理

    Spring Security 实战干货:自定义异常处理 转自:https://www.cnblogs.com/felordcn/p/12142514.html 文章目录 1. 前言 2. Sprin ...

  7. C++ 笔记(20)— 异常处理(抛出异常、捕获异常)

    异常提供了一种转移程序控制权的方式. C++ 异常处理涉及到三个关键字: try . catch . throw . throw : 当问题出现时,程序会抛出一个异常.这是通过使用 throw 关键字 ...

  8. recover 没有捕获异常_GO语言异常处理机制panic和recover分析

    本文实例分析了GO语言异常处理机制panic和recover.分享给大家供大家参考.具体如下: Golang 有2个内置的函数 panic() 和 recover(),用以报告和捕获运行时发生的程序错 ...

  9. ssm 异常捕获 统一处理_SSM 统一异常处理

    SSM 统一异常处理 spring创建中, 处理异常可以使用try-cache处理, 也可以使用spring提供的统一异常处理 在spring中, 统一处理异常有2中方式 注解方式 @Exceptio ...

最新文章

  1. oracle参数文件initorcl位置,ORACLE参数文件
  2. 职业操盘手内部教材 z
  3. MariaDB AX开源分析解决方案
  4. 你应该了解的 5 个 JavaScript 调试技巧
  5. BZOJ 1211 树的计数(purfer序列)
  6. 数学建模论文写作小技巧分享
  7. tensorrt轻松部署高性能dnn推理_部署环境之:tensorRT的插件
  8. typedef 的四个用途和两大陷阱
  9. 47. Python socket编程 2
  10. Linux作者批评英特尔指令集,Linux之父炮轰英特尔:ECC内存很重要,不好买都怪你胡搞...
  11. 教你如何把书本上的字快速弄到电脑上
  12. P1600 [NOIP2016 提高组] 天天爱跑步
  13. 有哪些值得推荐的好的算法书?
  14. PG性能调校(二):数据库硬件及基准评测
  15. 苹果电脑忘记开机密码怎么办?一段代码轻松解决
  16. oracle的month函数的使用方法,oracle add_month函数
  17. 一个是阆苑仙葩,一个是美玉无瑕
  18. Java多线程篇--concurrentHashMap
  19. Log4j2官方文档翻译--欢迎使用Log4j2!
  20. 股票买卖原理_如何在智能手机上买卖股票

热门文章

  1. Java Review - 并发编程_ThreadLocalRandom实现原理源码分析
  2. Spring Boot2.x-04Spring Boot基础-使用注解装配bean
  3. 学习笔记(五)——JavaScript(二)
  4. php 光速,PHP的光速教程
  5. QT教程1:ubuntu18.04安装QT5
  6. php万能注入密码,php下的SQL注入万能用户名和密码
  7. 怎么做才能让浏览器看不到token_卫生间回填及防水怎么做才能后患无忧
  8. 微信小程序长按保存图片
  9. matlab simulink 求解连续微分系统 混沌系统
  10. android 隐藏闹钟通知,redis环境搭建