推荐使用线上编辑器 dartpad.cn 进行学习,测试~
Dart
将异常封装到一个类中,出现错误时就会抛出异常消息。
使用 throw 抛出异常
代码语言:javascript复制使用 throw 抛出异常,但是不推荐使用。还不如一个 print 来得实在。
void main() {
// errorHere(); // Uncaught Error: First error
errorThere(); // Uncaught Error: Exception: Second error
}
void errorHere() {
throw('First error');
}
void errorThere() => throw Exception('Second error');
捕获异常
当发生时候,我们捕获到错误,然后将错误另行处理。错误的捕获是一个自下而上的操作,如果所有的方法都处理不了错误,则程序终止。
try-catch 语句
其语法格式如下:
代码语言:javascript复制try {
// 相关逻辑代码
} catch(error, stackTrace) {
// 处理错误
}
- error 是异常对象
- stackTrace 是
StackTrace
对象,异常的堆栈信息
比如:
代码语言:javascript复制void main() {
try{
throw('This is a Demo.');
} catch(error, stackTrack) {
// 输出异常信息
print('error: ${error.toString()}'); // error: This is a Demo.
// 输出堆栈信息
print('stackTrack: ${stackTrack.toString()}');
// stackTrack: This is a Demo.
// at Object.wrapException (<anonymous>:335:17)
// at main (<anonymous>:2545:17)
// at <anonymous>:3107:7
// at <anonymous>:3090:7
// at dartProgram (<anonymous>:3101:5)
// at <anonymous>:3109:3
// at replaceJavaScript (https://dartpad.cn/scripts/frame.js:19:19)
// at messageHandler (https://dartpad.cn/scripts/frame.js:80:13)
}
}
try-on-catch 语句
try
代码块中有很多语都发生了错误,发生错误的种类又不同,我们可以通过 on
来实现。
try {
// 逻辑代码
} on ExceptionType catch(error) {
// 处理代码块
} on ExceptionType catch(error) {
// 处理代码块
} catch(error, stackTrace) {
// 处理代码块
}
- ExceptionType 表示错误类型。
Dart
支持的内置错误有:
错误 | 描述 |
---|---|
DefferedLoadException | 延迟的库无法加载 |
FormatException | 转换失败 |
IntegerDivisionByZeroException | 当数字除以零时抛出错误 |
IOException | 输入输出错误 |
IsolateSpawnException | 无法创建隔离抛出错误 |
Timeout | 异步超时抛出错误 |
finally 语句
无论是否有异常,都会执行 finally
内部的语句。
try {
// 逻辑代码
} catch(error, stackTrace) {
// 错误处理
} finally {
// 里面的代码块,无论正确还是错误都会处理
}
finally
这个很容易理解,只需要记住上面的语法,使用就行了。
自定义异常
上面