예외는 예상치 못한 무언가가 발생했음을 알리는 에러이다.
다음과 같이 예외를 던질(발생시킬) 수 있다.
throw FormatException('알맞지 않은 형식');
임의의 객체를 던질 수도 있다.
throw '던졌다. 나의 예외';
예외 역시 표현식이기 때문에, 값으로써 할당할 수 있다.
void distanceTo(Point other) => throw UnimplementedError();
예외를 잡음(catching)으로써 예외의 전파를 중지시킬 수 있고, 예외를 처리할 기회를 제공한다.
한가지 타입 이상의 예외를 발생시킬 수 있는 코드를 처리하기 위해 여러 catch 절을 선언할 수 있다.
=> catch 절에 예외 타입을 명시하지 않으면, 모든 thrown 객체를 처리할 수 있다.
on
키워드를 사용하여 예외의 타입을 지정할 수 있다.
catch
키워드를 사용하여 예외 객체를 직접 다룰 수 있다.
try {
breedMoreLlamas();
} on OutOfLlamasException {
// A specific exception
buyMoreLlamas();
} on Exception catch (e) {
// 어떤 것이든 예외 타입 객체면 일단 다 catch
print('Unknown exception: $e');
} catch (e) {
// 타입 지정없이 그냥 전부 다 catch
print('Something really unknown: $e');
}
catch()
에 발생한 예외 객체
, StackTrace 객체
를 명시할 수 있다.
=> 각각 e
, s
로 나타내며, s
는 생략 가능
try {
// ···
} on Exception catch (e) {
print('Exception details:\\\\n $e');
} catch (e, s) {
print('Exception details:\\\\n $e');
print('Stack trace:\\\\n $s');
}