Dart 异常

2024 年 8 月 29 日 | 4 分钟阅读

Dart 异常是运行时错误。它在程序执行时引发。 当程序在内部运行时,程序不会在编译时报告错误,如果 Dart 编译器发现某些不合适的内容,则会报告运行时错误,并且程序的执行异常终止。 这种类型的错误称为异常。 例如 - 给定的数字除以零,或者我们尝试从空列表中访问元素。

Dart 支持以下类型的内置异常。

序号。异常描述
1.DefferedLoadException(延迟加载异常)当延迟库加载失败时抛出。
2.FormatException(格式异常)这是抛出的异常
3.IntegerDivisionByZeroException(整数除以零异常)当数字除以零时抛出。
4.IOException(IO异常)它是输入/输出相关异常的基类。
5.IsolateSpawnException(隔离体生成异常)当无法创建隔离体时抛出。
6.Timeout(超时)当等待异步结果时发生计划超时时抛出。

异常的主要目标是处理运行时错误并防止程序突然终止。 Dart 中的每个异常都是预定义类 Exception 的子类型。 Dart 提供了以下技术来处理异常。

try/on/catch 块

try 块用于保存可能抛出异常的代码块。 on 块用于在我们需要指定异常时。 catch 块用于处理程序需要异常对象时。

如果 try 块发现错误,它将抛出到 catch 块,catch 块具有处理错误的代码。 try 块必须后跟一个块(on/catch)或一个 finally 块。

异常处理的语法如下。

语法

try {
// code that might throw an exception
}
on Exception1 {
// Specify the exception
}
Catch Exception2 {
// code for handling exception
}

应该记住以下几点。

  • 我们可以使用多个 catch 块来处理多个异常。
  • on 块和 catch 块是互斥的,这意味着我们可以将 on 块和 catch 块都与 try 块关联。

在以下示例中,变量 x 分别除以变量 y。 当代码尝试除以零时,会抛出代码。 on 块包含处理异常的代码。 让我们了解以下代码。

示例 - 使用 on 块

输出

Cannot divide by zero

说明

在上面的代码中,我们在 main() 函数中声明了三个变量 x、yres。 我们在 try 块中编写了可疑代码,将 x 除以 0,这可能会抛出异常。 try 块找到错误,控制权转移到 on 块,该块具有处理错误的代码。 通过使用这个,程序没有停止执行。

让我们了解以下使用 catch 块的示例。

示例 - 使用 catch 块

输出

IntegerDivisionByZeroException

现在一起看一下 on...catch 块的示例

示例 3:on...catch 块

输出

IntegerDivisionByZeroException

finally 块

无论是否发生异常,finally 块始终执行。 它在 try/on/catch 之后无条件地执行。

finally 块的语法如下。

语法 -

让我们了解以下 finally 块的示例。

示例 -

输出

Cannot divide by zero 
Finally block executed

抛出异常

我们可以显式或强制地引发异常。 显式引发的异常应被处理,以避免程序急剧退出。 语法如下。

语法

让我们理解下面的例子。

示例 -

输出

The marks cannot be negative

自定义异常

正如我们上面讨论的,dart 中的每个异常都是内置类 Exception 的子类型。 Dart 提供了通过扩展现有异常类来创建自定义异常的灵活性。 语法如下。

语法:定义异常

让我们来理解以下代码。

示例 -

输出

Entered Amount should be greater than zero
Ending requested operation.....

说明

在上面的例子中,我们创建了一个自定义异常 AmtException。 如果输入的金额不在预期的范围内,代码会引发异常,我们将函数调用包含在 try...catch 块中。


下一个主题Dart Typedef