Durch Ausführen der Ausnahmebehandlung ist es möglich, die Ursache und den Ort des Fehlers zu identifizieren und geeignete Maßnahmen für den aufgetretenen Fehler zu ergreifen.
In diesem Artikel werden wir Folgendes vorstellen.
$!
$ @
rescue Schreiben Sie das Programm, das Sie normalerweise unter begin ausführen möchten, wie unten gezeigt. Schreiben Sie den Code, den Sie unter Rettung aufrufen möchten, wenn während der Ausführung des Programms eine Ausnahme auftritt.
begin
p "Auszuführender Code"
rescue
p "Code, der ausgeführt werden soll, wenn eine Ausnahme auftritt"
end
Ergebnis
"Auszuführender Code"
else Durch Hinzufügen von else zur Rettung Sie können den Code hinzufügen, den Sie aufrufen möchten, wenn die Ausnahme nicht auftritt.
begin
p "Auszuführender Code"
rescue
p "Code, der ausgeführt werden soll, wenn eine Ausnahme auftritt"
else
p "Code, der ausgeführt werden soll, wenn keine Ausnahme ausgelöst wird"
end
Ergebnis
"Auszuführender Code"
"Code, der ausgeführt werden soll, wenn keine Ausnahme ausgelöst wird"
"Rettungsbeispiel"
Wenn Sie eine Ausnahme erhalten, erstellen Sie ein Programm, das die Meldung "Ein Fehler ist aufgetreten!" Anzeigt.
Die Ausnahme ist, dass die Zeichenfolge nicht in "" (doppelte Anführungszeichen) eingeschlossen ist und der zu rettende Code ausgeführt wird.
begin
p string
rescue
p "Ausnahme aufgetreten"
end
Ergebnis
"Ausnahme aufgetreten"
ensure
Mit der Option "Für Ausnahmebehandlung sicherstellen" können Sie die auszuführende Verarbeitung unabhängig vom Vorhandensein oder Fehlen von Ausnahmen beschreiben.
begin
p "Auszuführender Code"
rescue
p "Code, der ausgeführt werden soll, wenn eine Ausnahme auftritt"
else
p "Code, der ausgeführt werden soll, wenn keine Ausnahme ausgelöst wird"
ensure
p "Letzter Code mit oder ohne Ausnahmen ausgeführt"
end
Ergebnis
"Auszuführender Code"
"Code, der ausgeführt werden soll, wenn keine Ausnahme ausgelöst wird"
"Letzter Code mit oder ohne Ausnahmen ausgeführt"
Es wird verwendet, wenn es einen Prozess gibt, den Sie zuverlässig ausführen möchten, auch wenn während der Ausführung eines Prozesses ein Fehler auftritt. (Beispiel) Bei einem Programm, das eine Datei öffnet und bearbeitet, können Sie sagen: "Schließen Sie die Datei immer am Ende, unabhängig vom Auftreten einer Ausnahme während der Ausführung."
(Beispiel) Wenn der Prozess normal endet
class Return
def test(n)
begin
1 / n
"Begin"
ensure
"Ensure"
end
end
end
obj = Return.new
p obj.test(1)
"Begin"
(Beispiel) Wenn die Ausnahmeverarbeitung erfolgt
class Return
def test(n)
begin
1 / n
"Begin"
rescue
'Rescue'
ensure
"Ensure"
end
end
end
obj = Return.new
p obj.test(0)
"Rescue"
return Wenn Sie eine Rückgabeerklärung in stellen, stellen Sie sicher,
Aus diesem Grund wird die ursprünglich erwartete Verarbeitung nicht ausgeführt.
Wenn die Rettung eliminiert wird und nur sichergestellt wird, dass sie wie unten gezeigt beschrieben wird, endet sie ursprünglich abnormal, wenn eine Ausnahmeverarbeitung auftritt.
class Return
def test(n)
begin
1 / n
"Begin"
ensure
"Ensure"
end
end
end
obj = Return.new
p obj.test(1)
p obj.test(0)
Ergebnis
(ZeroDivisionError)
Wenn Sie jedoch in return eine return-Anweisung schreiben, endet diese normal wie unten gezeigt.
class Return
def test(n)
begin
1 / n
"Begin"
ensure
"Ensure"
return "return ensure"
end
end
end
obj = Return.new
p obj.test(1)
p obj.test(0)
Ergebnis
"return ensure"
"return ensure"
class Return
def test(n)
begin
1 / n
"Begin"
rescue
'Rescue'
ensure
"Ensure"
return "return ensure"
end
end
end
obj = Return.new
p obj.test(1) #Ursprünglich"Begin"Ist zurück gekommen
p obj.test(0) #Ursprünglich"Rescue"Ist zurück gekommen
Ergebnis
"return ensure"
"return ensure"
Rettung kann auch wie ein Modifikator verwendet werden. Wie unten gezeigt, können Sie mit dem Rettungsmodifikator den Vorgang schreiben, bei dem Sie 5 Zeilen klar in 1 Zeile schreiben müssen.
class Return
def test
begin
String
rescue
"error!!!"
end
end
end
obj = Return.new
p obj.test
Sie können mit dem Rettungsmodifikator in eine Zeile schreiben!
class Return
def test
String-Rettung"error!!!"
end
end
obj = Return.new
p obj.test
Ergebnis
"error!!!"
Eine spezielle Variable ist eine Variable, die eine spezielle Bedeutung hat, die von Ruby bereitgestellt wird. Der Wert der Variablen, der das Ausnahmeobjekt durch Rettung zugewiesen wird, wird unabhängig davon zugewiesen, ob es angegeben ist oder nicht.
Wenn eine Ausnahme auftritt, wird das Ausnahmeobjekt (Ausnahme) zugewiesen. Wenn es mehrere Ausnahmen gibt, wird das letzte Ausnahmeobjekt zugewiesen. Wenn Sie keine Ausnahme erhalten, erhalten Sie null.
Die Rückverfolgung, in der die Ausnahme aufgetreten ist, wird als Array zugewiesen. Backtrace ist die Information über den Code, der die Ausnahme verursacht hat, und folgt dem Ablauf des gesamten Programms, das die Ausnahme verursacht hat.
[Verweise] (https://qiita.com/tsubasakat/items/6825bcefcad26da3471b)
Verwendungsbeispiel
Selbst wenn eine Ausnahme auf der Konsole auftritt (irb oder pry), ist die Ursache möglicherweise nicht bekannt, da die Rückverfolgung nicht angezeigt wird. Verwenden Sie die spezielle Variable $ @, um die Rückverfolgung für Ausnahmen in der Konsole anzuzeigen.
irb(main):002:0> puts $@
Wenn Sie eine Ausnahmebehandlung für die gesamte Methode bereitstellen möchten, können Sie Anfang / Ende weglassen.
Ein Beispiel für das Schreiben von "Anfang / Ende"
def hoge
begin
p 1/0
rescue
p "Error!!!"
end
end
Beispiel für das Weglassen von Anfang / Ende
def hoge
p 1/0
rescue
p "Error! !! !!"
end
raise Die Auslösemethode ist eine Methode zum absichtlichen Auslösen einer Ausnahme.
Wenn Sie wie folgt schreiben, löst die Raise-Methode eine Ausnahme aus, die Rescue-Methode wird ausgeführt und "Error !!!" wird ausgegeben.
begin
raise
rescue
p "Error! !! !!"
end
"Error! !! !!"
Diese Methode kann auch zur Rettung eingesetzt werden. Zusätzlich zum abnormalen Beenden des Programms, wenn eine Ausnahme auftritt, kann es verwendet werden, wenn Sie Ausnahmeinformationen protokollieren oder eine E-Mail senden möchten.
class Return
def test(n)
begin
1 / n
"Begin"
rescue
p "Error! !! !!(log)"
raise
end
end
end
obj = Return.new
obj.test(0)
"Error! !! !!(log)"
Traceback (most recent call last):
2: from ruby.rb:14:in `<main>'
1: from ruby.rb:4:in `test'
ruby.rb:4:in `/': divided by 0 (ZeroDivisionError)
Ausnahmeklassen ähneln Ruby-Klassen. Erstellen Sie Ihre eigene Ausnahmeklasse, die von StandardError erbt.
(Beispiel)
class Error < StandardError
end
Alle Ruby-Ausnahmeobjekte haben ein Nachrichtenattribut. Versuchen Sie, eine Standardnachricht für Ihre eigene Ausnahme wie folgt zu definieren:
class Error < StandardError
def initialize(msg="Error Message")
super
end
end
raise Error #=> Error Message
Sie können der Ausnahme Ihre eigenen Daten hinzufügen.
class Error < StandardError
attr_reader :attr
def initialize(msg="default Error message", attr="value")
@attr = attr
super(msg)
end
end
begin
raise Error.new("Error message", "value")
rescue => e
puts e.attr #=> value
end
Sie haben jetzt Ihre eigene Ausnahme erstellt.
Referenzartikel https://qiita.com/k-penguin-sato/items/3d8ce4e71520da2d68c4
https://qiita.com/ngron/items/4c319ae7340b72c7e566
Recommended Posts