Dart에서 Exception을 처리하는 다양한 방법을 소개합니다.
1. try catch
try - catch (e)
는 try 구문에서 예외가 발생했을 때, catch
에서 예외가 처리됩니다.
Exception 종류가 명시되지 않았기 때문에 모든 예외를 처리할 수 있습니다.
아래 예제에서는 예외 처리를 하여 프로그램이 종료되지 않습니다.
int.parse()
로 숫자가 아닌 문자를 int로 변환할 때 FormatException 에러가 발생합니다.
void main() {
String str = "12abc";
int n;
try {
n = int.parse(str);
print(n);
} catch (e) {
n = -1;
print("error: $e");
}
print("Finish");
}
Output:
error: FormatException: Invalid radix-10 number (at character 1)
12abc
^
Finish
2. try on
try on Exception
은 특정 예외만 처리합니다.
위의 try catch(e)
와 다르게 error 객체가 전달되지 않습니다.
아래 예제에서 try on FormatException
은 FormatException 예외만 처리할 수 있으며, 다른 예외가 발생하면 처리하지 못하고 프로그램이 종료됩니다.
void main() {
String str = "12abc";
int n;
try {
n = int.parse(str);
print(n);
} on FormatException {
n = -1;
print("set n to -1");
}
print("Finish, n = $n");
}
Output:
set n to -1
Finish, n = -1
2.1 두개 이상의 예외를 처리
try on Exception
으로 두개 이상의 예외를 처리할 때는, 아래와 같이 Exception 마다 on Exception
을 여러번 선언하면 됩니다.
try {
// do something
} on FormatException {
// exception handling
} on IntegerDivisionByZeroException {
// exception handling
}
3. try on Exception catch
try on Exception catch (e)
는 try on Exception
와 동일하게 동작하는데, error 객체가 추가로 전달됩니다.
아래 예제는 FormatException
만 처리할 수 있으며, 다른 Exception이 발생하면 처리하지 못하고 프로그램이 종료됩니다.
void main() {
String str = "12abc";
int n;
try {
n = int.parse(str);
print(n);
} on FormatException catch (e) {
n = -1;
print("error: $e");
}
print("Finish, n = $n");
}
Output:
error: FormatException: Invalid radix-10 number (at character 1)
12abc
^
Finish, n = -1
4. try on/catch finally
try - finally
는 try 구문 수행 후, finally
구문을 항상 수행합니다.
void main() {
int n;
try {
print("try");
n = 0;
} finally {
print("finally");
}
}
Output:
try
finally
try - catch - finally
는 예외 발생 유무에 따라 아래와 같은 순서로 코드가 수행됩니다.
- 예외가 발생하면
try -> catch -> finally
순서로 코드 수행 - 예외가 발생하지 않으면
try -> finally
순서로 코드 수행
아래 예제를 보면, 예외가 발생했을 때 catch
코드 수행 후에, finally
의 구문이 실행됩니다.
void main() {
String str = "12abc";
int n;
try {
n = int.parse(str);
print(n);
} on FormatException catch (e) {
n = -1;
print("error: $e");
} finally {
print("finally");
}
print("Finish, n = $n");
}
Output:
error: FormatException: Invalid radix-10 number (at character 1)
12abc
^
finally
Finish, n = -1
Related Posts
- Flutter/Dart - Future.delayed() 사용 방법
- Flutter/Dart - Stream 사용 방법
- Flutter/Dart - 파일, 디렉토리 삭제
- Flutter/Dart - 텍스트 파일 쓰기
- Flutter/Dart - 반복문 (for, while, for-in, forEach)
- Flutter/Dart - Static 변수, 메소드 선언
- Flutter/Dart - 텍스트 파일 읽기
- Flutter/Dart - 다양한 Null 체크 방법
- Flutter/Dart - Double을 Int로 변환
- Flutter/Dart - Double을 String으로 변환
- Flutter/Dart - String을 Double로 변환
- Flutter/Dart - String을 List로 변환
- Flutter/Dart - String에서 특정 문자열 Index 찾기
- Flutter/Dart - String 길이(length)
- Flutter/Dart - 몇 초 지연시키기, sleep
- Flutter/Dart - 날짜 계산, 년/월/일 더하고 빼기
- Flutter/Dart - 날짜 문자열을 DateTime으로 변환
- Flutter/Dart - 현재 시간 가져오기, DateTime
- Flutter/Dart - Map에 key-value 추가
- Flutter/Dart - Map 순회 방법
- Flutter/Dart - Map 선언 및 초기화
- Flutter/Dart - Map에서 Entry(key-value) 제거
- Flutter/Dart - key, value로 Map 정렬
- Flutter/Dart - 리스트 복사 방법
- Flutter/Dart - 리스트 합치는 방법
- Flutter/Dart - 리스트 최대값, 최소값 찾기
- Flutter/Dart - 리스트 요소 추가, 특정 위치 추가
- Flutter/Dart - 리스트 요소 제거
- Flutter/Dart - 리스트 합계, 평균 계산
- Flutter/Dart - 리스트 요소 값 변경, 찾기
- Flutter/Dart - 리스트 중복 제거
- Flutter/Dart - 리스트 정렬 (오름차순, 내림차순)
- Flutter/Dart - 리스트 자르기, 분리하기
- Flutter/Dart - 변수 타입 체크
- Flutter/Dart - 리스트 필터링