[RAILS] Informationen zu Ruby-Fehlermeldungen

1. 1. Einführung

Anfänger in der Programmierung werden unweigerlich Zeit brauchen, um die Fehlermeldung zu lesen. Im Moment neige ich dazu, den vollständigen Text der schnellsten Fehlermeldung zu kopieren und zu googeln. Wenn Sie jedoch googeln, erhalten Sie solche Informationen, aber Sie können nicht sagen, dass es sich um die richtigen Informationen handelt. Wie in "Einführung in Ruby für Profis" ausgeführt, hat das Ergebnis von Google, selbst wenn es ausgeführt wurde und erfolgreich gelöst zu werden schien, tatsächlich eine schwerwiegende Sicherheitslücke geschaffen. Es scheint etwas zu geben. Daher denke ich zunächst, dass es notwendig ist, die Fehlermeldung lesen und das Problem selbst extrahieren zu können. Ich habe diesen Artikel geschrieben, weil ich dachte, er würde mir helfen, Fehler und Fehler ziemlich schnell zu beseitigen und die Struktur von Ruby zu verstehen.

Referenziert → [Einführung in Ruby für diejenigen, die Profis werden möchten](https://www.amazon.co.jp/%E3%83%97%E3%83%AD%E3%82%92%E7% 9B% AE% E6% 8C% 87% E3% 81% 99% E4% BA% BA% E3% 81% AE% E3% 81% 9F% E3% 82% 81% E3% 81% AERuby% E5% 85% A5% E9% 96% 80-% E8% A8% 80% E8% AA% 9E% E4% BB% 95% E6% A7% 98% E3% 81% 8B% E3% 82% 89% E3% 83% 86 % E3% 82% B9% E3% 83% 88% E9% A7% 86% E5% 8B% 95% E9% 96% 8B% E7% 99% BA% E3% 83% BB% E3% 83% 87% E3 % 83% 90% E3% 83% 83% E3% 82% B0% E6% 8A% 80% E6% B3% 95% E3% 81% BE% E3% 81% A7-Software-Design-plus% E3% 82 % B7% E3% 83% AA% E3% 83% BC% E3% 82% BA / dp / 4774193976)

2. Wie man Backtrace liest

Wenn während der Programmausführung ein Fehler auftritt, werden Daten ausgegeben, die den Status des Methodenaufrufs anzeigen. Dies wird als Rückverfolgung bezeichnet. Hier wage ich es, die falsche Syntax einzugeben und Backtrace aufzurufen.

irb(main):001:0> puts hoge
Traceback (most recent call last):
        5: from /(Pfad, in dem Ruby installiert ist)/irb:23:in `<main>'
        4: from /(Pfad, in dem Ruby installiert ist)/irb:23:in `load'
        3: from /(Pfad, in dem Ruby installiert ist)/irb:11:in `<top (required)>'
        2: from (irb):1
        1: from (irb):2:in `rescue in irb_binding'
NameError (undefined local variable or method `hoge' for main:Object)

Das Obige ist die Backtrace-Ausgabe, da ich die falsche Syntax "Puts Hoge" in irb eingegeben habe (Ruby, das auf dem Terminal ausgeführt werden kann). Dies ist ein sehr einfacher Fehler, der aufgetreten ist, weil hoge nicht als Zeichenfolge erkannt werden konnte, indem es in einfache Anführungszeichen (') oder doppelte Anführungszeichen (") eingeschlossen wurde. Schauen wir uns die einzelnen Zeichen genauer an.

Zuerst

Traceback (most recent call last):

Dies ist jedoch keine Fehlermeldung, sondern ein Traceback (der letzte Aufruf), dh ein Satz, der Ruby ausführt und den letzten Ausführungsprozess bis zum nächsten Fehler anzeigt. Und dann

        5: from /(Pfad, in dem Ruby installiert ist)/irb:23:in `<main>'
        4: from /(Pfad, in dem Ruby installiert ist)/irb:23:in `load'
        3: from /(Pfad, in dem Ruby installiert ist)/irb:11:in `<top (required)>'
        2: from (irb):1
        1: from (irb):2:in `rescue in irb_binding'

Der Ausführungsprozess bis zum Fehler wird jedoch im Ablauf von 5: bis 1: angezeigt. Je tiefer Sie gehen, desto näher sind Sie dem Fehler (mit anderen Worten, je näher Sie dem neuesten sind). Hier bedeutet 5: bis 3: "Ausführungsprozess des irb-Programms" und dann 2: "die erste Zeile des irb-Programms ausführen". Ich habe 1 überprüft, aber die Bedeutung von "Rettung in irb_binding" nicht verstanden. Bedeutet das "wird es durch die zweite Zeile von irb ergänzt?" Nächster,

NameError (undefined local variable or method `hoge' for main:Object)

Dies ist die Fehlermeldung. Der erste ist NameError, was die Art der Fehlermeldung ist. Die Arten von Fehlermeldungen werden später erläutert. Das Folgende ist "undefinierte lokale Variable oder Methode" hoge "für main: Object". Da "hoge" jedoch nicht als Zeichenfolge erkannt werden kann, wird es von einer lokalen Variablen oder Konstante aus gesucht und nicht definiert. Es bedeutet, dass · · · Diesmal handelt es sich um eine Rückverfolgung aufgrund eines einfachen Fehlers, sodass nur 5 Zeilen erforderlich sind. Wenn dies jedoch kompliziert wird, werden möglicherweise Dutzende Zeilen des Ausführungskurses angezeigt. Auch in einem solchen Fall ist es notwendig, den Inhalt ruhig und sorgfältig zu lesen.

3. 3. Hauptfehlermeldungstypen

Fehlername Überblick
NameError Tritt auf, wenn undefinierte lokale Variablen oder Konstanten verwendet werden
NoMethodError Tritt auf, wenn versucht wird, eine nicht vorhandene Methode aufzurufen
SyntaxError Tritt auf, wenn im Quellcode ein Syntaxfehler vorliegt
TypeError Tritt auf, wenn ein Objekt, das nicht dem erwarteten Typ entspricht oder nicht das erwartete Verhalten aufweist, als Methodenargument übergeben wird
SystemStackError Tritt auf, wenn der Systemstapel überläuft. In der Regel geschieht dies, wenn Sie einen Methodenaufruf unendlich rekursiv ausführen.
LoadError Tritt auf, wenn die Anforderung oder das Laden fehlschlägt

Weitere Fehler finden Sie in der offiziellen Referenz (https://docs.ruby-lang.org/en/2.7.0/library/_builtin.html).

4. Was tun, wenn eine Fehlermeldung angezeigt wird?

(1) Überprüfen Sie die von Ihnen durchgeführte Prozedur und lesen Sie die Rückverfolgung.

(2) Verwenden Sie einen Debugger.

(3) Versuchen Sie, einen einfachen Code mit irb auszuführen.

(4) Überprüfen Sie das Protokoll.

(5) Lesen Sie Offizielle Dokumente.

(6) Suchen Sie nach Problem.

(7) Lesen Sie den Code der externen Bibliothek.

(8) Frag jemanden.

5. Zusammenfassung

Als Anfänger kann es sehr entmutigend sein, viele Fehlermeldungen zu sehen. Sie müssen ruhig und solide auf Fehlermeldungen reagieren. Es ist möglicherweise besser, im Voraus zu überlegen, was zu tun ist, wenn Sie auf einen Fehler stoßen.

Recommended Posts

Informationen zu Ruby-Fehlermeldungen
Über Ruby-Symbole
Über Ruby Hash
Über Ruby-Arrays
Informationen zur Ruby-Vererbung
Über Rubinblock
Über Ruby Hash
Über Ruby-Symbole
Über Ruby-Methoden
Über Rubys Kernel-Modul
Über keinen Methodenfehler
Informationen zur Behandlung von Ruby-Ausnahmen
Über Ruby Hash (Fortsetzung)
Informationen zu Ruby-Instanzmethoden
Über Logik nachdenken Ruby
[Ruby on Rails] Individuelle Anzeige von Fehlermeldungen
Informationen zum Spring Framework-Kontextfehler
Erläuterung des Ruby Range-Objekts
Ü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
Erläuterung zum Ruby String-Objekt
Über das Verhalten von Ruby Hash # ==
[Rails] Japanische Lokalisierung von Fehlermeldungen
Informationen zur Fehlerbehandlung der Kommentarfunktion
Über Ruby einfache Anführungszeichen und doppelte Anführungszeichen
[Schienen] Zeigen Sie Formularfehlermeldungen asynchron an
Informationen zum Ruby-Produktoperator (&) und zum Summenoperator (|)
[Super Einführung] Über Symbole in Ruby
Über =
Über objektorientierte Vererbung und über Ertrag Ruby
Erklärt Ruby Array-Objekte
Über Fehler bei der Implementierung der Federvalidierung
Ich möchte doppelte Fehlermeldungen beseitigen
[Rails] So zeigen Sie Fehlermeldungen einzeln an
Testen auf Fehlermeldungen: Rails Tutorial Notes-Kapitel 7
[Ruby / Rails] Mechanismus zum erneuten Versuch eines Thread-Fehlers
[Ruby on Rails] Informationen zum Active Record-Rückruf
Tipps zur Behandlung von gRPC-Fehlern in Ruby
So zeigen Sie Fehlermeldungen auf Japanisch an
[Ruby on Rails] Hinzufügen und Löschen von Tags und Anzeigen von (Erfolgs- / Fehler-) Meldungen mit Ajax.