Предположим, у нас есть этот дротик код:Понимание механизма обработки исключений (управление потоком) в Дарта
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 могут объяснить это несоответствие?
P.S.
Я думаю, что этот вопрос, связанный с темой «о программировании» и спрашивающей его здесь, является правильным местом и временем?
Похоже, что ошибка была исправлена где-то между r24275 и r24868, поэтому исправление должно быть включено в следующую версию. –
Спасибо, что указали это, Darshan Computing. –
@ShailenTuli Спасибо за все. Иногда тесты состоят в основном из простых синтетических (подверженных ошибкам) шаблонов. Это помогает найти неожиданное поведение. В реальной жизни все намного сложнее. Я надеюсь, что исправление этой проблемы может сэкономить время другим потенциальным пользователям. – mezoni