begin / rescue
Coddy'nin Ruby Journey'sinin Mantık ve Akış bölümünün bir parçası — ders 44 / 56.
Bir istisnanın programınızı çökertmesini durdurmak için, riskli kodu begin ... rescue ... end bloğu içine alın. Eğer begin içindeki herhangi bir şey hata verirse, Ruby programı durdurmak yerine eşleşen rescue bloğuna atlar.
begin
result = 10 / 0
puts result
rescue ZeroDivisionError
puts "Cannot divide by zero!"
end
# Cannot divide by zero!Hata nesnesinin kendisini => e ile yakalayabilir ve .message özelliğini okuyabilirsiniz:
begin
Integer("hello")
rescue ArgumentError => e
puts "Bad input: #{e.message}"
end
# Bad input: invalid value for Integer(): "hello"Bir istisna sınıfı belirtmezseniz, rescue kendi başına StandardError ve onun alt sınıflarını, yani çoğu günlük hatayı yakalar. Yakalama işlemi, en çok rescue bloğunda bir şeyler yapabildiğinizde yararlıdır: varsayılan bir değer atamak, sorunu günlüğe kaydetmek veya kullanıcıya tekrar sormak gibi.
Görev
KolayGirdiden iki satır okuyun, her ikisi de tam sayı olmalıdır, ancak ikincisi geçerli bir sayı olmayabilir.
İkinci satırın ayrıştırılmasını begin / rescue içine alın:
Integer(input)kullanın (hatalı bir dizedeArgumentErrorhatası verir)- Ayrıştırma başarılı olursa,
Sum: <a + b>yazdırın - Başarısız olursa,
Bad number!yazdırın
3 ve ardından 4 girdisi için çıktı Sum: 7 olur. 3 ve ardından abc için çıktı Bad number! olur.
Kopya kağıdı
Hataları (exception) çökme olmadan yönetmek için begin ... rescue ... end yapısını kullanın:
begin
result = 10 / 0
rescue ZeroDivisionError
puts "Cannot divide by zero!"
endHata mesajına erişmek için => e ile hata nesnesini yakalayın:
begin
Integer("hello")
rescue ArgumentError => e
puts "Bad input: #{e.message}"
endBir sınıf belirtmeden rescue kullanmak, StandardError ve onun alt sınıflarını yakalar.
Kendin dene
a = gets.to_i
raw_b = gets.chomp
# TODO: Integer(raw_b) etrafında begin/rescue kullanın; toplamı veya "Bad number!" yazdırın
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