Informationen zur Behandlung von Ruby-Ausnahmen

Was ist Ausnahmebehandlung?

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."

Rückgabewert für Ausnahmebehandlung

(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.

Das Auftreten einer Ausnahme wird abgebrochen und endet normal

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"

Der Wert von sure ist der Rückgabewert der Methode, unabhängig davon, ob eine Ausnahme aufgetreten ist.

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"

Rettungsmodifikator

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!!!"

Spezielle Variablen

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.

Sondervariable $!

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.

Spezielle Variable $ @

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 $@

Ausnahmebehandlung für die gesamte Methode bereitstellen (Anfang / Ende weggelassen)

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)

Erstellen Sie eine benutzerdefinierte Ausnahme

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

Informationen zur Behandlung von Ruby-Ausnahmen
Informationen zur Ausnahmebehandlung
Informationen zur Ausnahmebehandlung
Behandlung von Ruby-Ausnahmen
Ruby-Ausnahmebehandlung
[Java] Informationen zur Behandlung von Try-Catch-Ausnahmen
[Ruby] Ausnahmebehandlung in Funktionen
Ausnahmebehandlung
Ausnahmebehandlung Ausnahme
[Für Java-Anfänger] Informationen zur Ausnahmebehandlung
Java-Ausnahmebehandlung?
Über Ruby-Symbole
Über Ruby Hash
Über Ruby-Arrays
Informationen zur Ruby-Vererbung
Über Rubinblock
Über Ruby Hash
[Java] Ausnahmebehandlung
☾ Java / Ausnahmebehandlung
Über Ruby-Symbole
Informationen zur Behandlung von Java-Ausnahmen
Behandlung von Java-Ausnahmen
Über Ruby-Methoden
[Ruby] Ausnahmebehandlung, falls angegeben, zurückgeben
Über Rubys Kernel-Modul
Informationen zu Ruby-Fehlermeldungen
Praxis der Ausnahmebehandlung (ArithmeticException)
Über Ruby Hash (Fortsetzung)
Spring Boot-Ausnahmebehandlung
Informationen zu Ruby-Instanzmethoden
Über Logik nachdenken Ruby
[Java Silver] (Ausnahmebehandlung) Informationen zu den Anweisungen try-catch-finally und try-with-resource
Über den Umgang mit Null
Klassen, die eine Ausnahmebehandlung erfordern
Javas erste Ausnahmebehandlung (Denkmal)
[Java] Praxis der Ausnahmebehandlung [Ausnahme]
Erläuterung des Ruby Range-Objekts
Verwendungsregeln für die Behandlung von Java-Ausnahmen
Über reguläre Ausdrücke in Ruby
Über Ruby-Hashes und -Symbole
Ruby über verschiedene iterative Prozesse
Über Ruby und Objektmodell
Informationen zu Ruby-Klassen und -Instanzen
Ausnahmebehandlungstechniken in Java
Erläuterung zum Ruby String-Objekt
Über das Verhalten von Ruby Hash # ==
[Inhouse-Studiensitzung] Behandlung von Java-Ausnahmen (26.04.2017)
Informationen zur Fehlerbehandlung der Kommentarfunktion
Über Ruby einfache Anführungszeichen und doppelte Anführungszeichen
Ausnahme
Informationen zum Ruby-Produktoperator (&) und zum Summenoperator (|)