Dart 프로그래밍-예외

예외 (또는 예외 이벤트)는 프로그램 실행 중에 발생하는 문제입니다. 예외가 발생하면 프로그램의 정상적인 흐름이 중단되고 프로그램 / 응용 프로그램이 비정상적으로 종료됩니다.

내장 Dart 예외는 다음과 같습니다.

Sr. 아니요 예외 및 설명
1

DeferredLoadException

지연된 라이브러리로드에 실패하면 발생합니다.

2

FormatException

문자열 또는 일부 다른 데이터에 예상 된 형식이없고 구문 분석하거나 처리 할 수없는 경우 예외가 발생합니다.

삼

IntegerDivisionByZeroException

숫자를 0으로 나눌 때 발생합니다.

4

IOException

모든 Inupt-Output 관련 예외에 대한 기본 클래스입니다.

5

IsolateSpawnException

분리를 생성 할 수 없을 때 발생합니다.

6

Timeout

비동기 결과를 기다리는 동안 예약 된 시간 초과가 발생하면 발생합니다.

Dart의 모든 예외는 미리 정의 된 클래스의 하위 유형입니다. Exception. 응용 프로그램이 갑자기 종료되지 않도록 예외를 처리해야합니다.

try / on / catch 블록

그만큼 tryblock은 예외가 발생할 수있는 코드를 포함합니다. on 블록은 예외 유형을 지정해야 할 때 사용됩니다. 그만큼catch 블록은 핸들러에 예외 객체가 필요할 때 사용됩니다.

그만큼 try 블록 뒤에 정확히 하나가 와야합니다. on / catch 블록 또는 하나 finally블록 (또는 둘 중 하나). try 블록에서 예외가 발생하면 제어가catch.

그만큼 syntax 예외를 처리하는 방법은 다음과 같습니다.

try { 
   // code that might throw an exception 
}  
on Exception1 { 
   // code for handling exception 
}  
catch Exception2 { 
   // code for handling exception 
}

다음은 기억해야 할 몇 가지 사항입니다.

  • 코드 조각은 여러 예외를 처리하기 위해 하나 이상의 on / catch 블록을 가질 수 있습니다.

  • on 블록과 catch 블록은 상호 포함됩니다. 즉, try 블록은 on 블록과 catch 블록 모두와 연관 될 수 있습니다.

다음 코드는 Dart에서 예외 처리를 설명합니다.

예 : ON 블록 사용

다음 프로그램은 변수가 나타내는 두 숫자를 나눕니다. x 과 y각기. 코드는 0으로 나누기를 시도하므로 예외가 발생합니다. 그만큼on block 이 예외를 처리하는 코드를 포함합니다.

main() { 
   int x = 12; 
   int y = 0; 
   int res;  
   
   try {
      res = x ~/ y; 
   } 
   on IntegerDivisionByZeroException { 
      print('Cannot divide by zero'); 
   } 
}

다음을 생성해야합니다. output −

Cannot divide by zero

예 : catch 블록 사용

다음 예제에서는 위와 동일한 코드를 사용했습니다. 유일한 차이점은catch block(ON 블록 대신) 여기에는 예외를 처리하는 코드가 포함되어 있습니다. 매개 변수catch 런타임에 throw 된 예외 개체를 포함합니다.

main() { 
   int x = 12; 
   int y = 0; 
   int res;  
   
   try {  
      res = x ~/ y; 
   }  
   catch(e) { 
      print(e); 
   } 
}

다음을 생성해야합니다. output −

IntegerDivisionByZeroException

예 : on… catch

다음 예는 on...catch 블록.

main() { 
   int x = 12; 
   int y = 0; 
   int res;  
   
   try { 
      res = x ~/ y; 
   }  
   on IntegerDivisionByZeroException catch(e) { 
      print(e); 
   } 
}

다음을 생성해야합니다. output −

IntegerDivisionByZeroException

마지막 블록

그만큼 finally블록에는 예외 발생에 관계없이 실행되어야하는 코드가 포함됩니다. 선택 사항finally 블록은 다음에 무조건 실행됩니다. try/on/catch.

사용 구문 finally 블록은 다음과 같습니다-

try { 
   // code that might throw an exception 
}  
on Exception1 { 
   // exception handling code 
}  
catch Exception2 { 
   //  exception handling 
}  
finally { 
   // code that should always execute; irrespective of the exception 
}

다음 예는 finally 블록.

main() { 
   int x = 12; 
   int y = 0; 
   int res;  
   
   try { 
      res = x ~/ y; 
   } 
   on IntegerDivisionByZeroException { 
      print('Cannot divide by zero'); 
   } 
   finally { 
      print('Finally block executed'); 
   } 
}

다음을 생성해야합니다. output −

Cannot divide by zero 
Finally block executed

예외 던지기

그만큼 throw키워드는 명시 적으로 예외를 발생시키는 데 사용됩니다. 프로그램이 갑작스럽게 종료되는 것을 방지하기 위해 발생한 예외를 처리해야합니다.

그만큼 syntax 예외를 명시 적으로 발생시키는 것은-

throw new Exception_name()

예

다음 예는 throw 예외를 던지는 키워드-

main() { 
   try { 
      test_age(-2); 
   } 
   catch(e) { 
      print('Age cannot be negative'); 
   } 
}  
void test_age(int age) { 
   if(age<0) { 
      throw new FormatException(); 
   } 
}

다음을 생성해야합니다. output −

Age cannot be negative

사용자 지정 예외

위에서 지정한 것처럼 Dart의 모든 예외 유형은 기본 제공 클래스의 하위 유형입니다. Exception. Dart는 기존 예외를 확장하여 사용자 지정 예외를 만들 수 있습니다. 사용자 정의 예외를 정의하는 구문은 다음과 같습니다.

구문 : 예외 정의

class Custom_exception_Name implements Exception { 
   // can contain constructors, variables and methods 
}

사용자 지정 예외는 명시 적으로 발생해야하며 코드에서 동일하게 처리되어야합니다.

예

다음 예제는 사용자 정의 예외를 정의하고 처리하는 방법을 보여줍니다.

class AmtException implements Exception { 
   String errMsg() => 'Amount should be greater than zero'; 
}  
void main() { 
   try { 
      withdraw_amt(-1); 
   } 
   catch(e) { 
      print(e.errMsg()); 
   }  
   finally { 
      print('Ending requested operation.....'); 
   } 
}  
void withdraw_amt(int amt) { 
   if (amt <= 0) { 
      throw new AmtException(); 
   } 
}

위의 코드에서 사용자 지정 예외를 정의하고 있습니다. AmtException. 전달 된 금액이 예외 범위 내에 있지 않으면 코드에서 예외가 발생합니다. 그만큼main 함수는 함수 호출을 try...catch 블록.

코드는 다음을 생성해야합니다. output −

Amount should be greater than zero 
Ending requested operation....