Try Statement {Statement...} Finally Statement {Statement...} End; | Try Statement {Statement...} Except Statement {Statement...} End; | Try Statement {Statement...} Except On {Name :} Exception type Do Statement {Else Statement} End; | ||||||||||
deskripsi
The Try kata kunci yang digunakan untuk menandai awal blok pernyataan yang memiliki perangkap kesalahan . Jika kesalahan terjadi , program ini tidak dihentikan . Sebaliknya , kontrol akan diteruskan ke salah satu bagian Akhirnya atau Kecuali .
Cobalah digunakan dalam beberapa cara .
versi 1
Dalam Try - Akhirnya membangun, Akhirnya pernyataan dijamin akan dieksekusi benar-benar terlepas dari apa yang terjadi dalam klausa Try . Namun, akhirnya klausul tidak benar-benar menangani pengecualian - program ini akan berakhir jika ada klausa Kecuali ditemukan ( lihat catatan di bawah ) .
Coba - Akhirnya biasanya digunakan oleh rutin untuk memungkinkan pemrosesan pembersihan berlangsung , seperti sumber daya membebaskan , dengan pengecualian yang benar diteruskan ke pemanggil untuk menangani .
versi 2
Dalam versi ini , hanya jika klausa Try menghasilkan pengecualian akan dilakukan Kecuali klausa dieksekusi . Ini digunakan untuk mengambil tindakan alternatif ketika sesuatu yang tidak terduga terjadi kesalahan . Kecuali klausul tidak dapat menentukan jenis kesalahan namun.
versi 3
Hal ini mirip dengan versi 2 , tetapi menentukan tindakan yang berbeda untuk jenis pengecualian yang berbeda , seperti EInOutError . Klausul Lain dapat digunakan sebagai menangkap semua untuk jenis pengecualian yang tak terduga . General pengecualian jenis Exception dapat digunakan untuk menangkap semua jenis pengecualian .
Dengan menetapkan Nama untuk pengecualian , teks pesan pengecualian ( Name.Message ) dapat diperoleh untuk display atau penggunaan lainnya.
Ketika eksepsi dimunculkan dalam versi 3 setup, jika pengecualian tersebut tidak ditindaklanjuti oleh pernyataan Aktif atau Lain, maka cek dibuat untuk melihat apakah kita berada dalam bersarang Coba blok . Jika demikian, Kecuali klausul ini orangtua Try diproses . Jika tidak ada klausul Aktif atau Else ditemukan , program berakhir .
Yang Lain klausul sebenarnya tidak penting - itu adalah lebih baik untuk menggunakan Pada E : Exception Do, penanganan eksepsi generik , karena masih memberikan pesan kesalahan ( E.Message ) .
Penting: Anda dapat menentukan jenis kesalahan yang terjadi dengan menggunakan penanganan eksepsi generik - Pada E : Exception Do. E adalah pointer ke objek pengecualian yang dibuat oleh kondisi pengecualian . E.ClassName memberikan jenis pengecualian , seperti ' EDivByZero ' , seperti yang ditunjukkan dalam kode contoh terakhir .
The Try kata kunci yang digunakan untuk menandai awal blok pernyataan yang memiliki perangkap kesalahan . Jika kesalahan terjadi , program ini tidak dihentikan . Sebaliknya , kontrol akan diteruskan ke salah satu bagian Akhirnya atau Kecuali .
Cobalah digunakan dalam beberapa cara .
versi 1
Dalam Try - Akhirnya membangun, Akhirnya pernyataan dijamin akan dieksekusi benar-benar terlepas dari apa yang terjadi dalam klausa Try . Namun, akhirnya klausul tidak benar-benar menangani pengecualian - program ini akan berakhir jika ada klausa Kecuali ditemukan ( lihat catatan di bawah ) .
Coba - Akhirnya biasanya digunakan oleh rutin untuk memungkinkan pemrosesan pembersihan berlangsung , seperti sumber daya membebaskan , dengan pengecualian yang benar diteruskan ke pemanggil untuk menangani .
versi 2
Dalam versi ini , hanya jika klausa Try menghasilkan pengecualian akan dilakukan Kecuali klausa dieksekusi . Ini digunakan untuk mengambil tindakan alternatif ketika sesuatu yang tidak terduga terjadi kesalahan . Kecuali klausul tidak dapat menentukan jenis kesalahan namun.
versi 3
Hal ini mirip dengan versi 2 , tetapi menentukan tindakan yang berbeda untuk jenis pengecualian yang berbeda , seperti EInOutError . Klausul Lain dapat digunakan sebagai menangkap semua untuk jenis pengecualian yang tak terduga . General pengecualian jenis Exception dapat digunakan untuk menangkap semua jenis pengecualian .
Dengan menetapkan Nama untuk pengecualian , teks pesan pengecualian ( Name.Message ) dapat diperoleh untuk display atau penggunaan lainnya.
Ketika eksepsi dimunculkan dalam versi 3 setup, jika pengecualian tersebut tidak ditindaklanjuti oleh pernyataan Aktif atau Lain, maka cek dibuat untuk melihat apakah kita berada dalam bersarang Coba blok . Jika demikian, Kecuali klausul ini orangtua Try diproses . Jika tidak ada klausul Aktif atau Else ditemukan , program berakhir .
Yang Lain klausul sebenarnya tidak penting - itu adalah lebih baik untuk menggunakan Pada E : Exception Do, penanganan eksepsi generik , karena masih memberikan pesan kesalahan ( E.Message ) .
Penting: Anda dapat menentukan jenis kesalahan yang terjadi dengan menggunakan penanganan eksepsi generik - Pada E : Exception Do. E adalah pointer ke objek pengecualian yang dibuat oleh kondisi pengecualian . E.ClassName memberikan jenis pengecualian , seperti ' EDivByZero ' , seperti yang ditunjukkan dalam kode contoh terakhir .
Example code : Version 1 : Zero divide with a finally clause
var
number, zero : Integer;
begin
// Try to divide an integer by zero - to raise an exception
number := -1;
Try
zero := 0;
number := 1 div zero;
ShowMessage('number / zero = '+IntToStr(number));
finally
if number = -1 then
begin
ShowMessage('Number was not assigned a value - using default');
number := 0;
end;
end;
end;
number, zero : Integer;
begin
// Try to divide an integer by zero - to raise an exception
number := -1;
Try
zero := 0;
number := 1 div zero;
ShowMessage('number / zero = '+IntToStr(number));
finally
if number = -1 then
begin
ShowMessage('Number was not assigned a value - using default');
number := 0;
end;
end;
end;
Example code : Version 2 : Zero divide with a plain Except block
var
number, zero : Integer;
begin
// Try to divide an integer by zero - to raise an exception
Try
zero := 0;
number := 1 div zero;
ShowMessage('number / zero = '+IntToStr(number));
except
ShowMessage('Unknown error encountered');
end;
end;
number, zero : Integer;
begin
// Try to divide an integer by zero - to raise an exception
Try
zero := 0;
number := 1 div zero;
ShowMessage('number / zero = '+IntToStr(number));
except
ShowMessage('Unknown error encountered');
end;
end;
Example code : Version 3 : Divide by zero with an Except On clause
var
number, zero : Integer;
begin
// Try to divide an integer by zero - to raise an exception
Try
zero := 0;
number := 1 div zero;
ShowMessage('number / zero = '+IntToStr(number));
except
on E : Exception do
ShowMessage(E.ClassName+' error raised, with message : '+E.Message);
end;
end;
number, zero : Integer;
begin
// Try to divide an integer by zero - to raise an exception
Try
zero := 0;
number := 1 div zero;
ShowMessage('number / zero = '+IntToStr(number));
except
on E : Exception do
ShowMessage(E.ClassName+' error raised, with message : '+E.Message);
end;
end;
0 komentar:
Posting Komentar