Flutter/Flutter FAQ

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

독학코딩 2023. 12. 18. 09:26
반응형

질문


아래의 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은 결코 도달하지 않습니다.

반응형