2016-09-09 1 views
0

Sag ich mache .operator auf ein Objekt und .operator erzeugt einen Fehler, wie kann ich nicht das Programm beenden und stattdessen etwas anderes tun.Wie etwas bei einem Fehler in Ruby zu tun?

+0

Haben Sie in der Dokumentation [Exception Handling] (http lesen: // rubi-doc.org/core/doc/syntax/exceptions_rdoc.html)? – Stefan

Antwort

1

Rubin bietet Ausnahmebehandlung über begin, rescue Blöcke. Sie können die folgenden

exception_array = [] 

begin 
    array.operator 
rescue Exception => e 
    exception_array << e 
ensure 
    # this line will execute irrespective of an 
    # error happened or not 
end 

Lets Aufschlüsselung der Befehle tun, und das Programm

zuerst Ihr Programm fließen versuchen, den Befehl in begin Block auszuführen. Also, wenn es einen Fehler verursacht, dann geht es zu rescue Abschnitt

Exception ist da, um jede Art von Ausnahme zu fangen. Sie können jedoch auch den gewünschten Ausnahmetyp angeben. Im Folgenden ist der Rubin Ausnahme Hierarchie von nicksiegers blog

Exception 
    NoMemoryError 
    ScriptError 
     LoadError 
     NotImplementedError 
     SyntaxError 
    SignalException 
     Interrupt 
    StandardError 
     ArgumentError 
     IOError 
      EOFError 
     IndexError 
      StopIteration 
     LocalJumpError 
     NameError 
      NoMethodError 
     RangeError 
      FloatDomainError 
     RegexpError 
     RuntimeError 
     SecurityError 
     SystemCallError 
     SystemStackError 
     ThreadError 
     TypeError 
     ZeroDivisionError 
    SystemExit 
    fatal 

So je nach Fehlertyp können Sie einen bestimmten Fehlertyp fangen, wenn Sie wollen

=> e Teil ist Ihr Fehler einer Variablen zugewiesen genannt e. Sie können dies nach Belieben umbenennen.

Der letzte Teil ist ensure und das ist optional, Stellen Sie sicher, wird ausgeführt, egal, ob Sie einen Fehler erhalten oder nicht. Also, wenn Sie etwas zu erledigen haben, wenn ein Fehler auftritt oder nicht, können Sie ensure

Dies ist ein good read auf Rubin Fehlerbehandlung

1

Sie können dies tun, indem Sie Ausnahmen in rescue blockieren.

begin 
    array.operator 
# Change the class according to the Exception you are getting 
rescue StandardError => e 
    exceptions ||= [] 
    exceptions << e 
end 
+0

Können Sie erklären, was 'rettung StandardError => e 'ist? Wie kann ich es so machen, dass es bei einem Fehler den Fehler als String zur Konsole ausgibt? – Forwarding

+0

Basierend auf der Fehlerhierarchie in Ruby, stellt '' 'StandardError''' den niedrigsten Systemfehler dar, den Sie erfassen sollten. Sie könnten '' 'Exception''' einfangen, aber das bedeutet, dass Sie Dinge wie Programm-Beendigungen erfassen werden, was nicht großartig ist. Das obige Format ist im Wesentlichen "catch" (StandardError e) '' 'aus anderen Sprachen. – Mitch