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.
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.
Rettung ohne zu beginnen
python
puts 10 / 0 rescue 0
puts 10 / nil rescue 0
0
0
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.
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.
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
Der Verwendungszweck ist
python
begin
raise NoMethodError
rescue => e
p e
end
NoMethodError
Erben wir die Ausnahmeklasse (StandardError-Klasse).
python
class Hoge < StandardError
end
begin
raise Hoge
rescue => e
p e
end
#<Hoge: Hoge>
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.
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.
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