Programowanie D - obsługa wyjątków
Wyjątkiem jest problem, który pojawia się podczas wykonywania programu. Wyjątek AD jest odpowiedzią na wyjątkowe okoliczności, które pojawiają się, gdy program jest uruchomiony, na przykład próba podzielenia przez zero.
Wyjątki umożliwiają przekazanie kontroli z jednej części programu do drugiej. Obsługa wyjątków D jest oparta na trzech słowach kluczowychtry, catch, i throw.
throw- Program zgłasza wyjątek, gdy pojawia się problem. Odbywa się to za pomocą plikuthrow słowo kluczowe.
catch- Program przechwytuje wyjątek z obsługą wyjątków w miejscu w programie, w którym chcesz obsłużyć problem. Plikcatch słowo kluczowe wskazuje na przechwycenie wyjątku.
try - A tryblok identyfikuje blok kodu, dla którego zostały aktywowane określone wyjątki. Po nim następuje jeden lub więcej bloków catch.
Zakładając, że blok zgłosi wyjątek, metoda przechwytuje wyjątek przy użyciu kombinacji try i catchsłowa kluczowe. Blok try / catch jest umieszczany wokół kodu, który może generować wyjątek. Kod w bloku try / catch jest nazywany kodem chronionym, a składnia użycia try / catch wygląda następująco -
try {
// protected code
}
catch( ExceptionName e1 ) {
// catch block
}
catch( ExceptionName e2 ) {
// catch block
}
catch( ExceptionName eN ) {
// catch block
}
Możesz podać wiele catch instrukcje, aby wyłapać różne typy wyjątków w przypadku, gdy plik try block wywołuje więcej niż jeden wyjątek w różnych sytuacjach.
Rzucanie wyjątków w D.
Wyjątki można zgłaszać w dowolnym miejscu w bloku kodu przy użyciu throwsprawozdania. Operand instrukcji throw określa typ wyjątku i może być dowolnym wyrażeniem, a typ wyniku wyrażenia określa typ zgłoszonego wyjątku.
Poniższy przykład zgłasza wyjątek, gdy występuje warunek dzielenia przez zero -
Przykład
double division(int a, int b) {
if( b == 0 ) {
throw new Exception("Division by zero condition!");
}
return (a/b);
}
Łapanie wyjątków w D.
Plik catch blok następujący po tryblok wyłapuje każdy wyjątek. Możesz określić typ wyjątku, który chcesz przechwycić, i jest to określone przez deklarację wyjątku, która pojawia się w nawiasach po słowie kluczowym catch.
try {
// protected code
}
catch( ExceptionName e ) {
// code to handle ExceptionName exception
}
Powyższy kod łapie wyjątek od ExceptionNamerodzaj. Jeśli chcesz określić, że blok catch powinien obsługiwać każdy typ wyjątku, który jest zgłaszany w bloku try, musisz umieścić wielokropek, ..., między nawiasami otaczającymi deklarację wyjątku w następujący sposób -
try {
// protected code
}
catch(...) {
// code to handle any exception
}
Poniższy przykład zgłasza wyjątek dzielenia przez zero. Został złapany w blokadę.
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));
}
Kiedy powyższy kod jest kompilowany i wykonywany, odczytuje plik utworzony w poprzedniej sekcji i generuje następujący wynik -
Cannot divide by zero!
5