Dart 语言 自定义错误与错误处理模式实践

Dart阿木 发布于 2025-06-18 6 次阅读


Dart 语言自定义错误与错误处理模式实践

在软件开发过程中,错误处理是至关重要的。Dart 语言作为一种现代化的编程语言,提供了丰富的错误处理机制。本文将围绕 Dart 语言的自定义错误与错误处理模式进行实践,探讨如何创建自定义错误类型、使用异常处理以及编写健壮的代码。

自定义错误类型

在 Dart 中,错误通常是通过异常(Exception)来处理的。Dart 提供了两种类型的错误:运行时错误(Runtime Error)和异常(Exception)。对于一些特定的错误情况,我们可以通过自定义错误类型来提供更丰富的错误信息。

创建自定义错误类

在 Dart 中,我们可以通过扩展 `Exception` 类来创建自定义错误类。以下是一个简单的自定义错误类的示例:

dart

class CustomError extends Exception {


CustomError(String message) : super(message);


}


在这个例子中,`CustomError` 类继承自 `Exception` 类,并接受一个字符串参数 `message`,该参数用于存储错误信息。

使用自定义错误

使用自定义错误类与使用内置异常类似。以下是如何抛出和使用自定义错误的示例:

dart

void main() {


try {


throw CustomError('This is a custom error message.');


} catch (e) {


print(e);


}


}


在这个例子中,我们尝试抛出一个 `CustomError` 异常,并在 `catch` 块中捕获并打印错误信息。

错误处理模式

在 Dart 中,错误处理通常遵循以下模式:

try-catch 块

`try-catch` 块是 Dart 中最常用的错误处理模式。它允许你尝试执行可能抛出异常的代码,并在异常发生时捕获并处理它们。

dart

void main() {


try {


// 可能抛出异常的代码


int result = divide(10, 0);


print('Result: $result');


} catch (e) {


// 处理异常


print('Caught an exception: $e');


}


}

int divide(int a, int b) {


if (b == 0) {


throw FormatException('Cannot divide by zero');


}


return a / b;


}


在这个例子中,`divide` 函数尝试执行除法操作,如果除数为零,则抛出一个 `FormatException` 异常。在 `main` 函数中,我们使用 `try-catch` 块来捕获并处理这个异常。

finally 块

`finally` 块用于执行无论是否发生异常都要执行的代码。以下是一个使用 `finally` 块的示例:

dart

void main() {


try {


// 可能抛出异常的代码


print('Before throwing an exception.');


throw FormatException('An error occurred.');


} catch (e) {


// 处理异常


print('Caught an exception: $e');


} finally {


// 无论是否发生异常,都会执行的代码


print('This will always execute.');


}


}


在这个例子中,无论是否抛出异常,`finally` 块中的代码都会执行。

on-catch 块

`on-catch` 块允许你指定对特定类型的异常的处理。以下是一个使用 `on-catch` 块的示例:

dart

void main() {


try {


// 可能抛出异常的代码


throw FormatException('An error occurred.');


} on FormatException catch (e) {


// 处理 FormatException 类型的异常


print('Caught a FormatException: $e');


} catch (e) {


// 处理其他类型的异常


print('Caught an exception: $e');


}


}


在这个例子中,我们首先尝试捕获 `FormatException` 类型的异常,如果捕获失败,则会回退到通用的 `catch` 块。

异常链

在 Dart 中,你可以通过链式抛出异常来传递错误信息。以下是一个使用异常链的示例:

dart

void main() {


try {


throw CustomError('Outer error');


} catch (e) {


throw CustomError('Inner error', cause: e);


}


}

class CustomError extends Exception {


final Exception? cause;

CustomError(String message, {this.cause});

@override


String toString() {


return '$runtimeType: $message, cause: ${cause.toString()}';


}


}


在这个例子中,我们首先抛出一个 `CustomError` 异常,然后在 `catch` 块中再次抛出一个带有原始异常作为原因的新 `CustomError` 异常。

总结

在 Dart 语言中,自定义错误和错误处理模式是构建健壮应用程序的关键。通过创建自定义错误类型、使用 `try-catch` 块、`finally` 块和 `on-catch` 块,以及利用异常链,我们可以有效地处理错误,提高代码的健壮性和可维护性。

本文通过实践示例展示了 Dart 语言中自定义错误与错误处理模式的应用,希望对读者有所帮助。在实际开发中,合理地使用这些模式将使你的 Dart 应用程序更加可靠和稳定。