Flutter/Dart - 예외 처리(try-catch, try-on)

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
Loading script...

Related Posts

codechachaCopyright ©2019 codechacha