Beberapa Klausa rescue
Termasuk bagian Logika dan Alur dalam perjalanan Ruby di Coddy. Pelajaran 45 dari 56.
Satu blok begin dapat memiliki beberapa klausa rescue. Ruby memeriksanya dari atas ke bawah dan menjalankan klausa pertama yang kelas exception-nya cocok.
begin
number = Integer(gets.chomp)
result = 100 / number
puts result
rescue ArgumentError
puts "That's not a valid number."
rescue ZeroDivisionError
puts "Can't divide by zero."
endUrutan itu penting: cantumkan class yang spesifik sebelum class yang umum. Jika StandardError ditempatkan pertama, class itu akan menangani semuanya dan cabang-cabang berikutnya tidak akan pernah dijalankan.
Kamu juga bisa menangkap beberapa class pengecualian dalam satu percabangan dengan mencantumkannya menggunakan koma:
begin
risky_call
rescue ArgumentError, TypeError => e
puts "Bad input: #{e.message}"
endGunakan ini saat kode pemulihan sama untuk beberapa mode kegagalan.
Tantangan
MudahBaca dua baris dari input, yang keduanya dimaksudkan sebagai bilangan bulat. Gunakan Integer(...) untuk keduanya, lalu bagi bilangan pertama dengan bilangan kedua.
Tangani tiga kasus dengan cabang rescue yang terpisah:
ArgumentError→ cetakBad number!ZeroDivisionError→ cetakCannot divide by zero!TypeError→ cetakWrong type!
Jika semuanya berjalan lancar, cetak Result: <a / b> (pembagian bilangan bulat).
Untuk input 10 / 2, output-nya adalah Result: 5. Untuk 10 / 0, Cannot divide by zero!. Untuk 10 / abc, Bad number!.
Coba sendiri
raw_a = gets.chomp
raw_b = gets.chomp
# TODO: begin ... rescue ArgumentError ... rescue ZeroDivisionError ... rescue TypeError ... end
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Logika dan Alur
1Mendalami String
Ringkasan Method StringInterpolasi StringMenelusuri StringMemisahkan dan MenggabungkanRekap: Perangkai String4Block, Proc, dan Lambda
Apa Itu Block?do..end vs Kurung KurawalKata Kunci yieldParameter BlockProc dan LambdaRangkuman, Iterator Kustom5Andalan Enumerable
Select dan RejectMerangkai MapReduce / Injectcount, all?, any?, none?group_by dan partitionsort_by, min_by, max_byRekap: Alur Data8Pengambilan Keputusan Lanjutan
Case dengan class & regexwhen dengan Banyak NilaiOperator Ternaryif / unless SebarisUlasan, Pengklasifikasi Nilai3Array 2D
Dasar Array 2DMengakses Elemen Array 2DMenelusuri Array 2DPola Umum Array 2DRekap: Operasi Matriks6Proyek: Pengelola Perpustakaan
Ikhtisar ProyekTambahkan Buku9Penanganan error
Apa Itu Exception?begin / rescueBeberapa Klausa rescueensure dan raiseRingkasan, Kalkulator AmanLatihan sendiri: Compiler Ruby online