Warum ist es schlecht, Ausnahmen in Ruby zu retten?

Oluwafisayo Oluwatayo 15 Februar 2024
  1. Das Problem mit der Rettung von Ausnahmen in Ruby
  2. Bester Ansatz für Ausnahmen in Ruby
  3. Situationen, in denen Sie Ausnahmen retten können
  4. Abschluss
Warum ist es schlecht, Ausnahmen in Ruby zu retten?

Ausnahmen in Ruby sind die Fehler, auf die Programme stoßen, wenn wir versuchen, sie auszuführen. Einige dieser Ausnahmen führen zum Absturz unserer Programme, daher sind sie sehr nützlich, weil sie uns sagen, was die Probleme sind und woher das Problem kommt, dann wissen wir, welche Arten von Lösungen wir anwenden können.

Das Problem mit der Rettung von Ausnahmen in Ruby

Ausnahmen sind gut, weil sie als Hinweis auf die Probleme dienen, die wir mit unseren Programmen haben. Wir könnten versucht sein, Ausnahmen innerhalb des Codes zu retten, um diese bestimmte Ausnahme abzufangen, die unser Programm zum Absturz bringt, aber dies kann zu einem Problem statt einer Lösung werden.

Wenn Programme in Ruby ausgeführt werden, hat Ruby selbst Ausnahmen innerhalb dieser Programme, sodass diese Ausnahmen unsere Programme nicht zum Absturz bringen. Das Retten von Ausnahmen in Ruby verursacht also die folgenden Probleme in unserem Code:

  1. Das Retten von Ausnahmen rettet Interrupt und verhindert, dass der Benutzer das Problem mit Strg+C beendet.
  2. SignalException wird ebenfalls gerettet, was dazu führt, dass das Programm nicht auf Signale reagiert; Wir müssen das Schließen unseres Code-Editors erzwingen.
  3. Wenn SyntaxError gerettet wird, werden die Auswertungen des Ruby-Systems nur im Hintergrund ausgelöst.
  4. Rettungsausnahmen lösen noMemoryError aus, ein Fehler, der auftritt, wenn Ruby keinen Speicher zuweisen kann. Es ist ein unnötiger Fehler, der nicht gerettet werden muss.
  5. Es erschwert die Suche nach Fehlern, da alle Ausnahmen ausgelöst werden, und es wird schwierig, die tatsächliche Ausnahme zu lokalisieren, die das Programm zum Absturz gebracht hat.

Um dies in Aktion zu sehen, lassen Sie uns diesen Code ausführen, eine neue Datei erstellen und sie new.rb nennen:

neu.rb:

loop do
  begin
    sleep 1
    eval "djsakru3924r9eiuorwju3498 += 5u84fior8u8t4ruyf8ihiure"
  rescue Exception
    puts "I can't stop!"
  end
end

Rettungsausnahmen

Sie sehen eine Endlosschleife von Ich kann nicht aufhören, dann versuchen Sie, das Programm mit Strg+C zu stoppen, und es läuft einfach weiter. Die einzige Möglichkeit besteht darin, Ihren Code-Editor vollständig herunterzufahren.

Bester Ansatz für Ausnahmen in Ruby

Nachdem wir nun gesehen haben, dass das Retten von Ausnahmen zu katastrophalen Ereignissen in unseren Programmen führen kann, was ist der beste Weg, Ausnahmen in Ruby anzugehen?

  1. Wir können die ensure-Funktion von Ruby verwenden, anstatt Ausnahmen zu retten. Dadurch wird sichergestellt, dass der Code auch dann ausgeführt wird, wenn Ausnahmen auftreten.
  2. Retten Sie stattdessen StandardError, da die hier ausgelösten Ausnahmen Fehler sind, die die Anwendung direkt betreffen.

Sehen wir uns das folgende Code-Snippet an.

neu.rb:

loop do
  begin
    sleep 1
    eval "djsakru3924r9eiuorwju3498 += 5u84fior8u8t4ruyf8ihiure"
  rescue => e
    puts "I can't stop!"
  end
end

Sobald wir diesen Code ausführen, erhalten wir sofort den Syntaxfehler.

Standardfehler retten

Situationen, in denen Sie Ausnahmen retten können

Es gibt Fälle, in denen das Retten von Ausnahmen nützlich sein kann. In Situationen, in denen wir die Ausnahmen protokollieren möchten, können wir die Ausnahme erneut auslösen. Dadurch wird die Ausnahme für nachfolgende erneute Besuche protokolliert.

Wenn der Benutzer weiß, wie er mit den Ausnahmen umgeht, ist es sicher, sie zu retten.

Abschluss

Ausnahmen sind zweifellos Hinweise auf Fehler und Bugs in unseren Programmen; sie sind nützlich, um zu wissen, was korrigiert werden muss, wenn Programme aktualisiert werden; es ist nur eine Frage, wie ein Benutzer damit umgeht.

Oluwafisayo Oluwatayo avatar Oluwafisayo Oluwatayo avatar

Fisayo is a tech expert and enthusiast who loves to solve problems, seek new challenges and aim to spread the knowledge of what she has learned across the globe.

LinkedIn