[RAILS] À propos des messages d'erreur Ruby

1. 1. introduction

Les débutants en programmation prendront inévitablement du temps pour lire le message d'erreur. Pour le moment, j'ai tendance à copier le texte intégral du message d'erreur le plus rapide et à le rechercher sur Google. Cependant, si vous recherchez sur Google, vous obtiendrez des informations comme celle-là, mais vous ne pouvez pas dire que ce sont les informations correctes. Comme indiqué dans "Introduction à Ruby pour les professionnels", même si le résultat de Google a été exécuté et qu'il a semblé être résolu avec succès, il a en fait créé une faille de sécurité sérieuse. Il semble y avoir quelque chose. Donc, tout d'abord, je pense qu'il est nécessaire de pouvoir lire le message d'erreur et de pouvoir extraire le problème par vous-même. J'ai écrit cet article parce que je pensais que cela m'aiderait à me débarrasser assez rapidement des bogues et des erreurs et à comprendre la structure de Ruby.

Référencé → [Introduction à Ruby pour ceux qui souhaitent devenir des professionnels](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. Comment lire la trace

Si une erreur se produit pendant l'exécution du programme, les données indiquant l'état de l'appel de méthode sont générées. C'est ce qu'on appelle le traçage en arrière. Ici, j'ose entrer la mauvaise syntaxe et appeler backtrace.

irb(main):001:0> puts hoge
Traceback (most recent call last):
        5: from /(Chemin où Ruby est installé)/irb:23:in `<main>'
        4: from /(Chemin où Ruby est installé)/irb:23:in `load'
        3: from /(Chemin où Ruby est installé)/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)

Ce qui précède est la sortie de backtrace car j'ai entré la mauvaise syntaxe met hoge '' dans irb (Ruby qui peut être exécuté sur le terminal). C'est une erreur très simple qui s'est produite parce que hoge`` ne pouvait pas être reconnu comme une chaîne de caractères en la mettant entre guillemets simples (') ou doubles ("). Examinons chacun d'eux de plus près.

Premier

Traceback (most recent call last):

Cependant, ce n'est pas un message d'erreur, mais plutôt un traçage (le dernier dernier appel), c'est-à-dire une phrase qui exécute Ruby et affiche le dernier processus d'exécution jusqu'à l'erreur suivante. Et alors

        5: from /(Chemin où Ruby est installé)/irb:23:in `<main>'
        4: from /(Chemin où Ruby est installé)/irb:23:in `load'
        3: from /(Chemin où Ruby est installé)/irb:11:in `<top (required)>'
        2: from (irb):1
        1: from (irb):2:in `rescue in irb_binding'

Cependant, le processus d'exécution jusqu'à l'erreur est affiché dans le flux de 5: à 1 :. Plus vous allez bas, plus vous vous rapprochez de l'erreur (en d'autres termes, plus vous vous rapprochez de la dernière). Ici, de 5: à 3:, cela signifie "processus d'exécution du programme irb", et dans le suivant 2 :, cela signifie "exécuter la première ligne de irb". J'ai vérifié 1: mais je n'ai pas compris la signification de `` sauvetage dans irb_binding ''. Cela signifie-t-il "est-il complété par la deuxième ligne d'irb?" Suivant,

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

Ceci est le message d'erreur. Le premier est NameError '', qui est le type de message d'erreur. Les types de messages d'erreur seront expliqués plus loin. Ce qui suit est `ʻune variable locale ou méthode non définie` hoge'for main: Object, mais comme hoge`` ne peut pas être reconnu comme une chaîne de caractères, il est recherché à partir d'une variable locale ou d'une constante, et il n'est pas défini. Cela signifie que · · · Cette fois c'est une trace arrière due à une simple erreur, donc cela ne prend que 5 lignes, mais si cela devient compliqué, des dizaines de lignes de cours d'exécution peuvent s'afficher. Même dans un tel cas, il est nécessaire de lire le contenu calmement et attentivement.

3. 3. Principaux types de messages d'erreur

Nom de l'erreur Aperçu
NameError Se produit lors de l'utilisation de variables ou de constantes locales non définies
NoMethodError Se produit lorsque vous essayez d'appeler une méthode qui n'existe pas
SyntaxError Se produit lorsqu'il y a une erreur de syntaxe dans le code source
TypeError Se produit lorsqu'un objet qui n'est pas du type attendu ou qui n'a pas le comportement attendu est passé comme argument de méthode
SystemStackError Se produit lorsque la pile système déborde. En règle générale, cela se produit lorsque vous effectuez un appel de méthode infiniment récursif.
LoadError Se produit lorsque require ou load échoue

Pour les autres erreurs, consultez la référence officielle (https://docs.ruby-lang.org/en/2.7.0/library/_builtin.html).

4. Que faire si vous rencontrez un message d'erreur

(1) Vérifiez la procédure que vous avez effectuée et lisez la trace arrière.

(2) Utilisez un débogueur.

(3) Essayez d'exécuter un code simple avec irb.

(4) Vérifiez le journal.

(5) Lire Documents officiels.

(6) Recherchez issue.

(7) Lisez le code de la bibliothèque externe.

(8) Demandez à quelqu'un.

5. Résumé

En tant que débutant, voir beaucoup de messages d'erreur peut être assez décourageant. Vous devez être calme et solide pour répondre aux messages d'erreur. Il peut être préférable de réfléchir à ce qu'il faut faire à l'avance au cas où vous rencontriez une erreur.

Recommended Posts

À propos des messages d'erreur Ruby
À propos des symboles Ruby
À propos de Ruby Hash
À propos des tableaux Ruby
À propos de l'héritage Ruby
À propos de Ruby Block
À propos de Ruby Hash
À propos des symboles Ruby
À propos des méthodes Ruby
À propos du module Ruby's Kernel
À propos de Aucune erreur de méthode
À propos de la gestion des exceptions Ruby
À propos de Ruby Hash (suite)
À propos des méthodes d'instance Ruby
Réflexion sur la logique Ruby
[Ruby on Rails] Affichage individuel des messages d'erreur
À propos de l'erreur de contexte Spring Framework
Explication sur l'objet Ruby Range
À propos des expressions régulières dans Ruby
À propos des hachages et symboles Ruby
Ruby à propos de divers processus itératifs
À propos de Ruby, modèle objet
À propos des classes et des instances Ruby
Explication sur l'objet Ruby String
À propos du comportement de ruby Hash # ==
[Rails] Localisation japonaise des messages d'erreur
À propos de la gestion des erreurs de la fonction de commentaire
À propos des guillemets simples et doubles Ruby
[Rails] Afficher les messages d'erreur du formulaire de manière asynchrone
À propos de l'opérateur de produit Ruby (&) et de l'opérateur somme (|)
[Super Introduction] À propos des symboles dans Ruby
À propos =
À propos de l'héritage orienté objet et du rendement Ruby
Explique les objets Ruby Array
À propos des erreurs lors de la mise en œuvre de la validation du printemps
Je souhaite éliminer les messages d'erreur en double
[Rails] Comment afficher les messages d'erreur individuellement
Test des messages d'erreur: Notes du didacticiel Rails - Chapitre 7
[Ruby / Rails] Mécanisme de nouvelle tentative d'erreur de thread
[Ruby on Rails] À propos du rappel Active Record
Conseils pour la gestion des erreurs de gRPC dans Ruby
Comment afficher les messages d'erreur en japonais
[Ruby on Rails] Ajoutez et supprimez des balises et affichez les messages (succès / erreur) en utilisant ajax.