avoid_catches_without_on_clauses 린트 규칙: on 절 없는 catch 피하기

avoid_catches_without_on_clauses 린트 규칙: on 절 없는 catch 피하기

catch 절에 on 절을 붙이지 않으면, 잡아내야 할 예외뿐 아니라 예상하지 못한 오류까지 잡아버릴 수 있어요. 이 린트 규칙은 on 없는 catch를 잡아내서 예외 처리를 더 안전하게 만들도록 도와줘요.

출처: avoid_catches_without_on_clauses

본문

설명

Effective Dart에서 제안하는 내용이에요.

on 절 없이 catch를 사용하지 마세요.

on 절 없이 catch 절을 사용하면 코드가 예상하지 못한 오류에 노출되고, 그 오류가 던져지지도 않아서(그래서 눈에 띄지 않고) 지나치기 쉬워져요.

BAD:

try {
  somethingRisky()
} catch(e) {
  doSomething(e);
}

GOOD:

try {
  somethingRisky()
} on Exception catch(e) {
  doSomething(e);
}

몇 가지 예외적인 경우는 허용돼요.

  • catch의 본문이 예외를 다시 던지는(rethrow) 경우.
  • 잡힌 예외가 Future.error, Completer.completeError, FlutterError.reportError의 인자, 또는 반환 타입이 Never인 어떤 함수에 "직접 사용되는" 경우.
  • 잡힌 예외가 throw 표현식에 직접 사용되는 경우.

이런 경우에 "직접 사용된다"는 것은 예외가 관련 코드 안에서(예를 들어 어떤 인자 안에서) 참조된다는 뜻이에요. 래퍼 예외를 만들기 위해 예외 변수가 관련 코드보다 앞서 참조된다면, 그 변수는 "직접 사용된" 게 아니에요.

활성화 방법

avoid_catches_without_on_clauses 규칙을 활성화하려면 analysis_options.yaml 파일의 linter > rules 아래에 규칙을 추가하면 돼요.

linter:
  rules:
    - avoid_catches_without_on_clauses

대신 YAML 맵 문법을 사용해서 린트 규칙을 설정하고 있다면, linter > rules 아래에 avoid_catches_without_on_clauses: true를 추가하면 돼요.

linter:
  rules:
    avoid_catches_without_on_clauses: true

더 알아보기