D 프로그래밍-예외 처리

예외는 프로그램 실행 중에 발생하는 문제입니다. AD 예외는 0으로 나누려는 시도와 같이 프로그램이 실행되는 동안 발생하는 예외적 인 상황에 대한 응답입니다.

예외는 프로그램의 한 부분에서 다른 부분으로 제어를 전송하는 방법을 제공합니다. D 예외 처리는 세 개의 키워드를 기반으로합니다.try, catch, 및 throw.

  • throw− 문제가 발생하면 프로그램에서 예외가 발생합니다. 이것은throw 예어.

  • catch− 프로그램은 문제를 처리하려는 프로그램의 위치에서 예외 처리기로 예외를 포착합니다. 그만큼catch 키워드는 예외 포착을 나타냅니다.

  • try − A tryblock은 특정 예외가 활성화 된 코드 블록을 식별합니다. 그 뒤에는 하나 이상의 catch 블록이 있습니다.

블록이 예외를 발생 시킨다고 가정하면 메서드는 다음 조합을 사용하여 예외를 포착합니다. trycatch키워드. 예외를 생성 할 수있는 코드 주위에 try / catch 블록이 배치됩니다. try / catch 블록 내의 코드를 보호 코드라고하며 try / catch를 사용하는 구문은 다음과 같습니다.

try { 
   // protected code 
} 
catch( ExceptionName e1 ) { 
   // catch block 
} 
catch( ExceptionName e2 ) { 
   // catch block 
} 
catch( ExceptionName eN ) { 
   // catch block 
}

여러 목록을 나열 할 수 있습니다. catch 다른 유형의 예외를 포착하는 문 try block은 서로 다른 상황에서 둘 이상의 예외를 발생시킵니다.

D에서 예외 발생

예외는 다음을 사용하여 코드 블록 내 어디에서나 발생할 수 있습니다. throw진술. throw 문의 피연산자는 예외의 유형을 결정하며 모든식이 될 수 있으며 식의 결과 유형에 따라 throw되는 예외의 유형이 결정됩니다.

다음 예제는 0으로 나누기 조건이 발생하면 예외를 throw합니다.

double division(int a, int b) { 
   if( b == 0 ) { 
      throw new Exception("Division by zero condition!"); 
   }
   
   return (a/b); 
}

D에서 예외 잡기

그만큼 catch 다음 블록 try블록은 모든 예외를 포착합니다. 포착하려는 예외 유형을 지정할 수 있으며 이는 catch 키워드 다음에 괄호 안에 표시되는 예외 선언에 의해 결정됩니다.

try { 
   // protected code 
} 

catch( ExceptionName e ) { 
   // code to handle ExceptionName exception 
}

위의 코드는 다음과 같은 예외를 포착합니다. ExceptionName유형. catch 블록이 try 블록에서 발생하는 모든 유형의 예외를 처리하도록 지정하려면 다음과 같이 예외 선언을 둘러싼 괄호 사이에 줄임표, ...를 넣어야합니다.

try { 
   // protected code 
} 

catch(...) { 
   // code to handle any exception 
}

다음 예제에서는 0으로 나누기 예외가 발생합니다. 캐치 블록에 걸려 있습니다.

import std.stdio; 
import std.string;
  
string division(int a, int b) { 
   string result = "";  
   
   try {  
      if( b == 0 ) {
         throw new Exception("Cannot divide by zero!"); 
      } else { 
         result = format("%s",a/b); 
      } 
   } catch (Exception e) { 
      result = e.msg; 
   }
   
   return result; 
} 
 
void main () { 
   int x = 50; 
   int y = 0;  
   
   writeln(division(x, y));  
   
   y = 10; 
   writeln(division(x, y)); 
}

위의 코드가 컴파일되고 실행되면 이전 섹션에서 생성 된 파일을 읽고 다음과 같은 결과를 생성합니다.

Cannot divide by zero!
5