다트 언어 입문(6)-예외

다트 언어 시리즈
Dart 언어 입문(1)
Dart 언어 입문(2)
Dart 언어 입문(3)
Dart 언어 입문(4)
다트 언어 입문(5)
다트 언어 입문(6)-예외
Exceptions
당신 의Dart코드 는 이상 을 던 지고 포착 할 수 있 습 니 다.이상 은 오류 가 알 수 없 는 이상 이 발생 한 다 는 것 을 나타 낸다.이상 하 게 잡 히 지 않 으 면 이상 하 게 격 리 되 고 프로그램 이 중단 되 는 경우 가 많다.Java에 비해 모든Dart의 이상 은 검사 되 지 않 은 이상 이다.방법 은 그것들 이 일 으 킬 수 있 는 이상 을 설명 하지 않 을 뿐만 아니 라,당신 은 어떠한 이상 도 포착 할 필요 가 없습니다.DartExceptionError유형,그리고 많은 미리 정 의 된 하위 유형 을 제공 했다.물론 당신 도 자신의 이상 을 정의 할 수 있 습 니 다.또한Dart프로그램 은 비 어 있 는 대상-ExceptionError대상 뿐만 아니 라-이상 으로 도 던 질 수 있다.
Throw
다음은 이상 을 던 져 이상 을 일 으 키 는 예 이다.
throw FormatException('Expected at least 1 section');

너 도 이것 을 임의의 이상 대상 을 던 질 수 있다.
throw 'Out of llamas!';

참고:생산 품질의 코드 는 보통 유형Error또는Exception을 던 집 니 다.
이상 한 문 구 를 던 지면=>문 구 를 던 질 수 있 고 표현 식 이 허용 되 는 모든 곳 에서 이상 한 문 구 를 던 질 수 있 습 니 다.
void distanceTo(Point other) => throw UnimplementedError();

Catch
이상 을 포착 하거나 잡 으 면 이상 의 확산 을 막 을 수 있 습 니 다(이상 을 다시 던 지지 않 는 한).이상 을 포착 하면 처리 할 기 회 를 드 립 니 다:
try {
  breedMoreLlamas();
} on OutOfLlamasException {
  buyMoreLlamas();
}

여러 종류의 이상 한 코드 를 처리 하기 위해 서 는 여러 개의 캡 처 문 구 를 지정 할 수 있 습 니 다.첫 번 째 캡 처 문 구 는 대상 유형 처리 이상 과 일치 합 니 다.캡 처 문 구 는 형식 이 지정 되 지 않 으 면 name 문 구 는 모든 유형의 던 지기 대상 을 처리 합 니 다.
try {
  breedMoreLlamas();
} on OutOfLlamasException {
  // A specific exception
  buyMoreLlamas();
} on Exception catch (e) {
  // Anything else that is an exception
  print('Unknown exception: $e');
} catch (e) {
  // No specified type, handles all
  print('Something really unknown: $e');
}

위 에서 보 여 준 코드 와 같이on또는catch또는 둘 다 사용 할 수 있 습 니 다.이상 유형 이 명확 해 야 할 때 사용 할 수 있 습 니 다on.catch 를 사용 할 때 이상 처리 프로그램 은 이상 대상 이 필요 합 니 다.하나 또는 두 개의 인 자 를 지정 할 수 있 습 니 다catch().첫 번 째 인 자 는 던 져 진 이상 이 고 두 번 째 인 자 는 스 택 정보StackTrace대상 입 니 다.
try {
  // ···
} on Exception catch (e) {
  print('Exception details:
$e'); } catch (e, s) { print('Exception details:
$e'); print('Stack trace:
$s'); }

일부 이상 처 리 를 위해 확산 을 허용 하기 위해rethrow키 워드 를 사용 합 니 다.
void misbehave() {
  try {
    dynamic foo = true;
    print(foo++); // Runtime error
  } catch (e) {
    print('misbehave() partially handled ${e.runtimeType}.');
    rethrow; // Allow callers to see the exception.
  }
}

void main() {
  try {
    misbehave();
  } catch (e) {
    print('main() finished handling ${e.runtimeType}.');
  }
}

Finally
일부 코드 가 이상 여부 와 상 관 없 이 실 행 될 수 있 도록 사용finally.이상 과 일치 하 는catch문구 가 없 으 면finally문구 가 실 행 된 후에 이상 하 게 확 산 됩 니 다.
try {
  breedMoreLlamas();
} finally {
  // Always clean up, even if an exception is thrown.
  cleanLlamaStalls();
}

finally문 구 는 일치 하 는catch문 구 를 실행 한 후에:
try {
  breedMoreLlamas();
} catch (e) {
  print('Error: $e'); // Handle the exception first.
} finally {
  cleanLlamaStalls(); // Then clean up.
}

좋은 웹페이지 즐겨찾기