当前位置:首页 > 后端开发 > 正文内容

Flutter/Dart第13天:Dart错误处理

邻居的猫1个月前 (12-09)后端开发1125

Dart官方文档:https://dart.dev/language/error-handling

重要说明:本博客依据Dart官网文档,但并不是简略的对官网进行翻译,在掩盖中心功用情况下,我会依据个人研制经历,参加自己的一些扩展问题和场景验证。

反常

和Java相同,Dart也能够抛出反常,也能够捕获反常。Dart反常假如未被捕获,简单导致进程挂起和导致程序退出。所以,咱们在编写Dart程序时,需求特别重视反常。

和Java不同的是,Dart中的反常全部都是未检测反常。假如一个办法没有声明任何类型的反常,那么咱们就无需捕获该办法的反常。

Dart供给了ExceptionError两种反常的根底类型,一起内置了其他一些它们的子类。咱们也能够界说咱们自己的反常类型,Dart能够把任何非空的目标当作反常抛出,且这些目标类型纷歧定是ExceptionError类型的子类(和Java有很大差异)。

throw抛出反常

Dart能够把使命非空目标当作反常抛出,但主张抛出的反常为Exception或许Error的子类,下面是几个代码样例:

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

throw 'Out of llamas!';

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

catch捕获反常

捕获反常,一般有种意图:一是为了阻挠反常持续传达,二是咱们希望从头抛出反常。

捕获反常的语法有几种:

  • on 反常类型 catch(反常目标)
  • catch(反常目标)
  • catch(反常目标, 反常仓库)

捕获反常后,咱们能够进行一些处理。咱们能够依据反常类型,捕获多个反常。反常句子中若未界说反常类型,则捕获一切反常,如下代码样例:

try {
  breedMoreLlamas();
} on OutOfLlamasException {
  // `OutOfLlamasException`类型的反常
  buyMoreLlamas();
} on Exception catch (e) {
  // `Exception`类型的反常
  print('Unknown exception: $e');
} catch (e) {
  // 其他的一切的反常
  print('Something really unknown: $e');
}

反常仓库类型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从头抛出反常

如下代码样例,当捕获到反常之后,能够经过rethrow从头抛出反常:

void misbehave() {
  try {
    dynamic foo = true;
    print(foo++); // 制作反常
  } catch (e) {
    print('misbehave() partially handled ${e.runtimeType}.');
    rethrow; // 从头抛出反常
  }
}

void main() {
  try {
    misbehave();
  } catch (e) {
    print('main() finished handling ${e.runtimeType}.');
  }
}

finally子句

当咱们不管是否有反常产生,都行履行某个逻辑时,咱们可用运用finally子句。当产生反常时,首要履行catch子句进行捕获,若未被捕获或许从头抛出反常,那么这个反常会在履行完fianlly之后被抛出。

try {
  breedMoreLlamas();
} finally {
  // 不管是否有反常产生,均会履行本逻辑
  cleanLlamaStalls();
}

try {
  breedMoreLlamas();
} catch (e) {
  // 首要:捕获反常
  print('Error: $e');
} finally {
  // 然后:履行本逻辑
  cleanLlamaStalls();
}

断语

在使用的开发阶段,经过成果为false的断句子子(如:assert(<condition>, <optionalMessage>);句子)来阻断程序履行。几种断句子子的代码样例:

// `text`不能为null
assert(text != null);

// `number`有必要小于100
assert(number < 100);

// `urlString`有必要以`https`最初
assert(urlString.startsWith('https'), 'URL ($urlString) should start with "https".');

断语失利(表达式成果为false)时,抛出AssertionError类型(Error类型的子类)的反常。

断语在以下场景下会收效:

  • Flutter使用程序在debug形式(开发阶段,敞开了断语)。
  • 类似于webdev等开发东西,默许敞开了断语。
  • 类似于dart rundart compile js等东西,且经过命令行增加了--enable-asserts敞开断语参数。

而在出产阶段,断语相关代码被疏忽,因而断语会失效(不会履行)。


我的本博客原地址:https://ntopic.cn/p/2023101401


扫描二维码推送至手机访问。

版权声明:本文由51Blog发布,如需转载请注明出处。

本文链接:https://www.51blog.vip/?id=270

分享给朋友:

“Flutter/Dart第13天:Dart错误处理” 的相关文章

Go Vue3 CMS办理后台(前后端别离形式)

Go Vue3 CMS办理后台(前后端别离形式)

本后台运用前后端别离形式开发,前端UI为Vue3+Ant Design Vue,后端Api为Go+Gin,解耦前后端逻辑,使开发更专心 技能栈 前端:Vue3,Ant Design Vue,Axios,分页,OTP动态码登录 后端:Go,Gin,Gorm,Mysql,Docker,JWT,跨域,...

为什么我崇奉长时间主义,而且以为没有战略是很恐惧的工作?

为什么我崇奉长时间主义,而且以为没有战略是很恐惧的工作?

写在前面 3813 字 | 长时刻主义 | 时刻 | 考虑 | 生长 | 视角 | 观念 | 辩证 | 暴言留意 正文   前两天跟朋友聊到一个乐子,顺着聊到怎样看人。他问我一起的朋友 A 怎样样。我说,大问题没有,就是从长时刻主义来看,她没有战略是很惊骇的作业。   他过了两分钟,问我为什么会...

java获取当前时间, Java中的日期时间类

在Java中,你可以使用`java.time`包中的类来获取当前时间。以下是获取当前日期和时间的几种方法:1. 使用`LocalDateTime`类:```javaimport java.time.LocalDateTime;public class CurrentTime { public...

python处理excel,从入门到精通

python处理excel,从入门到精通

当然可以。Python中有几个库可以用来处理Excel文件,其中最常用的是`openpyxl`和`pandas`。下面我会简单介绍一下如何使用这两个库来读取和写入Excel文件。 使用 `openpyxl``openpyxl` 是一个用于读写Excel 2010 xlsx/xlsm/xltx/xlt...

java项目实例,基于Spring Boot的在线书店系统开发实战

java项目实例,基于Spring Boot的在线书店系统开发实战

1. 微信小程序开发(前端 后端) 项目介绍:该项目利用Java作为后端语言,配合前端技术,开发微信小程序。适合对微信小程序开发感兴趣的开发者。 源码地址:2. SpringBoot Vue.js搭建图书管理系统 项目介绍:该项目使用SpringBoot作为后端框架,Vue.js作...

c语言switch,深入解析C语言中的switch语句

在C语言中,`switch` 语句是一种多分支选择结构,它允许你基于表达式的值来选择要执行的代码块。这种结构通常用于处理多种情况,而不是使用多个 `ifelse` 语句。`switch` 语句的一般形式如下:```cswitch { case 常量表达式1: 语句序列1;...