'on'을 사용한 예외 처리
Coddy Dart 여정의 로직 & 흐름 섹션에 포함된 레슨 — 65개 중 40번째.
기본적인 try-catch 블록은 발생하는 모든 예외를 포착하지만, 때로는 서로 다른 유형의 예외를 서로 다른 방식으로 처리해야 할 때가 있습니다. on 키워드를 사용하면 특정 예외 유형을 포착하고 각각에 대해 맞춤형 응답을 제공할 수 있습니다.
일반적인 catch를 사용하여 모든 예외를 포착하는 대신, on 뒤에 예외 유형을 지정하여 특정 예외를 대상으로 할 수 있습니다. 이를 통해 프로그램이 다양한 오류 상황에 대응하는 방식을 더 세밀하게 제어할 수 있습니다.
try {
int number = int.parse("abc");
} on FormatException {
print("Please enter a valid number");
}이 예제에서 코드는 유효하지 않은 텍스트를 숫자로 파싱하려고 할 때 발생하는 FormatException을 구체적으로 캡처합니다. 이를 통해 사용자를 혼란스럽게 할 수 있는 일반적인 오류 메시지를 표시하는 대신, 문제를 직접적으로 해결하는 명확하고 사용자 친화적인 메시지를 제공할 수 있습니다.
여러 개의 on 블록을 결합하여 서로 다른 예외 유형을 적절한 응답으로 처리함으로써, 에러 처리를 정확하고 사용자 친화적으로 만들 수 있습니다.
챌린지
쉬움on 키워드를 사용하여 특정 예외를 포착하는 방법을 보여주는 프로그램을 작성하세요. 프로그램은 다양한 유형의 사용자 입력을 처리하고 맞춤형 오류 메시지와 함께 특정 예외 유형을 처리합니다.
- 수학적 표현식 유형(
"parse","divide", 또는"access")을 나타내는 문자열 입력을 읽습니다. - 첫 번째 값을 나타내는 문자열 입력을 읽습니다.
- 두 번째 값을 나타내는 문자열 입력을 읽습니다(해당하는 경우).
- 표현식 유형에 따라 특정 예외 처리를 사용하여 해당 작업을 수행합니다:
"parse"의 경우:int.parse()를 사용하여 첫 번째 값을 정수로 변환하고 특히FormatException을 포착합니다."divide"의 경우: 두 값을 모두 정수로 파싱하여 나눗셈을 수행하고, 파싱 오류에 대해FormatException을 포착합니다."access"의 경우: 첫 번째 값을 포함하는 리스트를 생성하고 두 번째 값으로 지정된 인덱스에 접근하며, 잘못된 인덱스에 대해RangeError를 포착합니다.- 결과 또는 특정 오류 메시지를 아래에 표시된 정확한 형식으로 출력합니다.
예를 들어, 입력이 "parse", "42", "unused"인 경우 프로그램은 다음과 같이 출력해야 합니다:
Operation: parse
Input: 42
Parsing successful!
Result: 42입력이 "parse", "xyz", "unused"인 경우 프로그램은 다음과 같이 출력해야 합니다:
Operation: parse
Input: xyz
FormatException caught: Invalid number format
Please provide a valid integer입력이 "divide", "10", "2"인 경우 프로그램은 다음과 같이 출력해야 합니다:
Operation: divide
Values: 10, 2
Division successful!
Result: 5입력이 "divide", "10", "abc"인 경우 프로그램은 다음과 같이 출력해야 합니다:
Operation: divide
Values: 10, abc
FormatException caught: Invalid number format
Cannot perform division with invalid numbers입력이 "access", "hello", "1"인 경우 프로그램은 다음과 같이 출력해야 합니다:
Operation: access
List: [hello]
Index: 1
RangeError caught: Index out of range
Valid indices are 0 to 0프로그램은 on 키워드와 함께 별도의 try-catch 블록을 사용하여 FormatException 및 RangeError를 구체적으로 포착해야 합니다. 각 예외 유형에는 무엇이 잘못되었는지 명확하게 설명하는 고유한 맞춤형 오류 메시지가 있어야 합니다. "access" 작업의 경우, 첫 번째 입력 값만 포함하는 리스트를 생성하고 두 번째 입력 값으로 지정된 인덱스에 접근을 시도하세요.
치트 시트
일반적인 catch 블록을 사용하는 대신 on 키워드를 사용하여 특정 예외 유형을 포착하세요:
try {
int number = int.parse("abc");
} on FormatException {
print("Please enter a valid number");
}여러 개의 on 블록을 결합하여 각기 다른 예외 유형을 적절한 응답으로 처리할 수 있습니다:
try {
// 서로 다른 예외를 발생시킬 수 있는 일부 코드
} on FormatException {
print("Invalid format error");
} on RangeError {
print("Index out of range error");
}이 방식은 각 특정 예외 유형에 맞는 맞춤형 응답을 가능하게 함으로써 에러 처리에 대해 더 많은 제어권을 제공합니다.
직접 해보기
import 'dart:io';
void main() {
// 입력 읽기
String? operation = stdin.readLineSync();
String? firstValue = stdin.readLineSync();
String? secondValue = stdin.readLineSync();
// 연산 정보 표시
print('Operation: $operation');
// TODO: 아래에 코드를 작성하세요
// 특정 예외를 처리하기 위해 'on' 키워드와 함께 try-catch 블록을 사용하세요
// parse 및 divide 연산에 대한 FormatException을 처리하세요
// access 연산에 대한 RangeError를 처리하세요
}이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
로직 & 흐름의 모든 레슨
1고급 리스트 조작
리스트 속성: first 및 last리스트 상태: isEmpty 및 isNotEmpty리스트 뒤집기리스트에 추가: insert리스트 요소 제거: removeWhere리스트에서 찾기: indexOf리스트 정렬리스트 섞기요약 - 리스트 정리 도구