İçeriğe geç

Ensure İçinde Fırlatma (ARCH6155)

Anahtar ruby.logging.raise-in-ensure · Önem error · Kategori logging

ensure bloğu içinde istisna fırlatmak, begin gövdesinden gelen mevcut istisnayı maskeler ve gerçek hatayı kaybeder. Temizlik kodu hata fırlatmamalıdır.

def write(file)
file.write(data)
ensure
raise "Akış kapatılamadı" unless file.close
end
def write(file)
file.write(data)
ensure
begin
file.close
rescue => e
Rails.logger.warn("Akış kapatılamadı", exception: e)
end
end

ensure bloğundaki temizlik hatalarını yakalayıp loglayın; oradan istisna fırlatmayın.