다트 언어 입문(6)-예외
Dart 언어 입문(1)
Dart 언어 입문(2)
Dart 언어 입문(3)
Dart 언어 입문(4)
다트 언어 입문(5)
다트 언어 입문(6)-예외
Exceptions
당신 의
Dart
코드 는 이상 을 던 지고 포착 할 수 있 습 니 다.이상 은 오류 가 알 수 없 는 이상 이 발생 한 다 는 것 을 나타 낸다.이상 하 게 잡 히 지 않 으 면 이상 하 게 격 리 되 고 프로그램 이 중단 되 는 경우 가 많다.Java
에 비해 모든Dart
의 이상 은 검사 되 지 않 은 이상 이다.방법 은 그것들 이 일 으 킬 수 있 는 이상 을 설명 하지 않 을 뿐만 아니 라,당신 은 어떠한 이상 도 포착 할 필요 가 없습니다.Dart
는Exception
과Error
유형,그리고 많은 미리 정 의 된 하위 유형 을 제공 했다.물론 당신 도 자신의 이상 을 정의 할 수 있 습 니 다.또한Dart
프로그램 은 비 어 있 는 대상-Exception
과Error
대상 뿐만 아니 라-이상 으로 도 던 질 수 있다.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.
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.