假设我们有这个 Dart 代码:
void main() {
try {
try {
throw null;
} catch(e) {
throw null;
} finally {
print('first');
}
} finally {
print('second');
}
}
通过http://try.dartlang.org在浏览器中运行此代码时
产生的结果非常令人期待。
first
second
Uncaught Throw of null.
但是如果在 Dart VM 中运行这段代码,结果会非常意外。
second
Unhandled exception: Throw of null.
这看起来像第一个终止块(finally
)永远不会被执行。
我无法理解异常处理机制的这种行为。
当然,我们可以假设这是一个错误。但是异常处理是任何系统的基石。Dart 开发人员如何解释这种差异?
附言
我认为这个问题与“关于编程”的主题有关,在这里问它是正确的地点和时间吗?