본문 바로가기
Flutter/Flutter FAQ

Flutter 플러터와 다트의 try-catch 구문에서 catch가 실행되지 않습니다., Flutter and Dart try catch—catch does not fire

by 베타코드 2023. 12. 18.
반응형

질문


아래의 HTML을 한국어로 번역하되, HTML 태그와 태그 안의 텍스트는 영어로 유지해주세요.

주어진 단축 코드 예시:
    ...
    print("1 parsing stuff");
    List<dynamic> subjectjson;
    try {
      subjectjson = json.decode(response.body);
    } on Exception catch (_) {
      print("throwing new error");
      throw Exception("Error on server");
    }
    print("2 parsing stuff");
    ...

catch 블록은 디코딩이 실패할 때마다 실행될 것으로 예상합니다. 그러나 잘못된 응답이 반환되면 터미널에는 예외가 표시되고 catch나 계속 진행하는 코드가 실행되지 않습니다...

flutter: 1 parsing stuff
[VERBOSE-2:ui_dart_state.cc(148)] Unhandled Exception: type
'_InternalLinkedHashMap<String, dynamic>' is not a subtype of type
'List<dynamic>'

여기서 무엇을 놓치고 있는 걸까요?


답변


함수는 어떤 것이든 던질 수 있습니다. 심지어 Exception이 아닌 것들도:

void foo() {
  throw 42;
}

하지만 on Exception 절은 오직 Exception의 하위 클래스만을 명시적으로 catch합니다.

따라서, 다음 코드에서:

try {
  throw 42;
} on Exception catch (_) {
  print('never reached');
}

on Exception은 결코 도달하지 않습니다.

반응형

댓글