Birden Fazla rescue İfadesi
Coddy'nin Ruby Journey'sinin Mantık ve Akış bölümünün bir parçası — ders 45 / 56.
Bir begin bloğu birden fazla rescue ifadesine sahip olabilir. Ruby bunları yukarıdan aşağıya kontrol eder ve hata sınıfı eşleşen ilkini çalıştırır.
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."
endSıralama önemlidir: genel olanlardan önce özel sınıfları listeleyin. İlk sıraya yerleştirilen StandardError her şeyi yutar ve sonraki dallar asla çalışmaz.
Ayrıca, istisna sınıflarını virgülle listeleyerek tek bir dalda birden fazla istisna sınıfını yakalayabilirsiniz:
begin
risky_call
rescue ArgumentError, TypeError => e
puts "Bad input: #{e.message}"
endKurtarma kodu birkaç hata modu için aynı olduğunda bunu kullanın.
Görev
KolayGirdiden her ikisi de tam sayı olması beklenen iki satır okuyun. Her ikisi için de Integer(...) kullanın, ardından ilkini ikinciye bölün.
Üç durumu ayrı rescue dalları ile ele alın:
ArgumentError→Bad number!yazdırınZeroDivisionError→Cannot divide by zero!yazdırınTypeError→Wrong type!yazdırın
Eğer her şey çalışırsa, Result: <a / b> yazdırın (tam sayı bölmesi).
10 / 2 girdisi için çıktı Result: 5 olur. 10 / 0 için Cannot divide by zero!. 10 / abc için Bad number!.
Kopya kağıdı
Bir begin bloğu birden fazla rescue ifadesine sahip olabilir — Ruby bunları yukarıdan aşağıya doğru eşleştirir:
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."
endGenel olanlardan önce özel istisna sınıflarını listeleyin — ilk sıraya yerleştirilen StandardError gibi genel bir sınıf, sonraki tüm dalları yutacaktır.
Virgülle ayırarak tek bir dalda birden fazla istisna sınıfını yakalayın:
rescue ArgumentError, TypeError => e
puts "Bad input: #{e.message}"Kendin dene
raw_a = gets.chomp
raw_b = gets.chomp
# YAPILACAK: begin ... rescue ArgumentError ... rescue ZeroDivisionError ... rescue TypeError ... end
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Mantık ve Akış bölümündeki tüm dersler
1Derinlemesine Stringler
String Metotlarına Genel BakışString InterpolationStringler Üzerinde GezinmeSplit ve JoinÖzet - String Weaver4Bloklar, Procs ve Lambdalar
Blok Nedir?do..end ve Süslü Parantezleryield Anahtar KelimesiBlok ParametreleriProcs ve LambdalarÖzet - Özel İteratör7Hashes Bölüm 2
Varsayılan Değerlerle Hash.newHash Yapıları Üzerinde Yinelemeİç İçe Hash YapılarıBirleştirme ve DönüştürmeÖzet - Frekans Sayacı10Proje - Öğrenci Kayıtları
Projeye Genel BakışÖğrenci Ekle5Enumerable Gücü
Select ve RejectMap ZincirlemeReduce / Injectcount, all?, any?, none?group_by ve partitionsort_by, min_by, max_byÖzet - Data Pipeline8İleri Seviye Karar Yapıları
Sınıflar ve Regex ile CaseÇok Değerli whenTernary OperatörüSatır İçi if / unlessÖzet - Not Sınıflandırıcı32D Diziler
2D Dizi Temelleri2D Elemanlara Erişim2D Diziler Üzerinde YinelemeYaygın 2D KalıplarÖzet - Matris İşlemleri6Proje - Kütüphane Yöneticisi
Projeye Genel BakışKitap Ekle9Hata Yönetimi
İstisna Nedir?begin / rescueBirden Fazla rescue İfadesiensure ve raiseÖzet - Güvenli Hesap Makinesi