[RAILS] [Ruby] Ausnahmebehandlung, falls angegeben, zurückgeben

Angenommen, Sie möchten bestimmte Daten analysieren und nur bestimmte Daten in der Datenbank speichern. Wenn es eine Erweiterung gibt, die nicht analysiert werden kann, tritt ein Fehler auf, die Verarbeitung wird unterbrochen und ein Fehler tritt auf.

Daher ist die Ausnahmeverarbeitung bequem und es ist möglich, die Verarbeitung im Falle eines Ausnahmefalls durchzuführen, ohne die Verarbeitung zu unterbrechen.

In der Tat ist es möglich zu erkennen, "wenn gegeben, zurückgeben, zurückgeben".

Schauen wir uns diesmal die Ausnahmebehandlung anhand einer einfachen Berechnung als Beispiel an.

Verarbeitung, wenn ein Fehler auftritt Start / Rettung

Wenn ich in Ruby versuche, 10 durch 0 zu teilen, wird eine Fehlermeldung angezeigt.

python


puts 10 / 0
puts "Hallo"
divided by 0 (ZeroDivisionError)

Der Prozess wird in der Mitte unterbrochen.

Deshalb,

python


begin
  10 / 0
rescue
  p "Bricht nicht bei 0"
end

puts "Hallo"
"Bricht nicht bei 0"
"Hallo"

Die Verarbeitung wurde nicht unterbrochen und sowohl die Fehlerverarbeitung als auch die normale Verarbeitung wurden ausgeführt.

Abkürzung

Rettung ohne zu beginnen

python


puts 10 / 0 rescue 0
puts 10 / nil rescue 0 
0
0

Speichern Sie den Fehlerinhalt in einer Variablenrettung =>

python


begin
  10 / 0
rescue => e
  puts e
end

puts "Hallo"
divided by 0
Hallo

Das Fehlerobjekt kann in der Variablen e gespeichert und ausgegeben werden.

Ändern Sie die Verarbeitung für jedes Fehlerrettungsobjekt "Fehlermeldung".

python


begin
  10 / 0
rescue NoMethodError
  puts "Es gibt keine solche Methode"
rescue ZeroDivisionError
  puts "Bricht nicht bei 0"
end
Bricht nicht bei 0

Da es der zweiten Fehlermeldung entspricht, reagiert es auf die Rettung.

wichtiger Punkt

Wenn das übergeordnete Element der Zielausnahmeklasse zuerst beschrieben wird, wird es zuerst verarbeitet.

python


begin
  10 / 0
rescue StandardError
  puts "Grundfehler"
rescue ZeroDivisionError
  puts "Bricht nicht bei 0"
end
Grundfehler

Erhöhen Sie, um einen expliziten Fehler zu generieren und den Prozess zu unterbrechen

Der Verwendungszweck ist

  1. Wenn die Parameter nicht erwartet werden
  2. Wenn nicht autorisierter Zugriff erfolgt

python


begin
  raise NoMethodError
rescue => e
  p e
end
NoMethodError

Erhöhen Sie Ihren eigenen Fehler

Erben wir die Ausnahmeklasse (StandardError-Klasse).

python


class Hoge < StandardError
end

begin
  raise Hoge
rescue => e
  p e
end
#<Hoge: Hoge>

Auch wenn ein Fehler auftritt, versuchen Sie es von Anfang an erneut

python


num = 0

begin
  puts 10 / num
rescue ZeroDivisionError => e
  puts e
  num = 1
  retry
end

puts "Fertig"
divided by 0
10
Fertig

In der ersten Schleife ist ein Fehler aufgetreten In der zweiten Schleife wird die Verarbeitung normal ausgeführt.

Die Verarbeitung mit oder ohne Fehler ist sicherzustellen

python


begin
  puts "Keine Ausnahmen"
rescue => e
  puts e
ensure
  puts "Hello"
end
Keine Ausnahmen
Hello

sicherstellen, dass immer zu jeder Zeit durchgeführt wird.

Was ist ein zusätzliches Fehlerobjekt?

python


begin
  10 / 0
rescue => e
  puts e.class
  puts e.class.superclass
  puts e.class.superclass.superclass
  puts e.class.superclass.superclass.superclass
end
ZeroDivisionError
StandardError
Exception
Object

Ausnahme ist die Quellklasse und Object ist die übergeordnete Klasse

Recommended Posts

[Ruby] Ausnahmebehandlung, falls angegeben, zurückgeben
Behandlung von Ruby-Ausnahmen
Ruby-Ausnahmebehandlung
Informationen zur Behandlung von Ruby-Ausnahmen
[Ruby] Ausnahmebehandlung in Funktionen
Ausnahmebehandlung
Ausnahmebehandlung Ausnahme
Java-Ausnahmebehandlung?
Informationen zur Ausnahmebehandlung
Informationen zur Ausnahmebehandlung
[Java] Ausnahmebehandlung
☾ Java / Ausnahmebehandlung
Informationen zur Behandlung von Java-Ausnahmen
Behandlung von Java-Ausnahmen
Praxis der Ausnahmebehandlung (ArithmeticException)
Spring Boot-Ausnahmebehandlung