Quels mécanismes existent pour perturber le fonctionnement d'une partie du projet?
sobes.tech IA
Réponse de l'IA
-
Exceptions (Exceptions): Permettent d'arrêter l'exécution du code en cas d'erreur et de transférer le contrôle aux blocs
begin/rescue/ensure.begin # Code pouvant provoquer une erreur result = 1 / 0 rescue ZeroDivisionError => e # Gestion d'une erreur spécifique puts "Erreur de division par zéro : #{e.message}" # Possibilité de journalisation ou d'exécution alternative rescue StandardError => e # Gestion d'autres erreurs standard puts "Une autre erreur est survenue : #{e.message}" ensure # Code qui s'exécute toujours, indépendamment de l'erreur puts "Fin du bloc" end -
Raise: Déclenchement explicite d'une exception, pour les classes d'erreur standard ou personnalisées.
# Déclenchement normal d'une exception raise "Quelque chose s'est mal passé" # Déclenchement avec une classe d'erreur spécifique raise MyCustomError, "Valeur invalide" -
exit,abort,Kernel#exit!: Méthodes pour terminer l'exécution du programme.exit!termine immédiatement sans appeler les gestionnairesat_exit.# Fin normale du programme exit(0) # 0 indique une sortie réussie # Fin avec erreur abort("Fin due à une erreur critique") # Fin forcée Kernel.exit!(1) -
Thread#raise: Permet de lancer une exception dans un autre thread.
thread = Thread.new do begin loop { sleep 1 } rescue => e puts "Thread intercepté : #{e.class}" end end sleep 2 thread.raise StandardError, "Arrêt du thread" thread.join -
Erreurs de programmation (logiques, syntaxiques): Un code mal écrit peut entraîner des défaillances.
# Erreur syntaxique (absence de end) def my_method puts "Bonjour" # Erreur logique (boucle infinie) while true puts "Boucle" end -
Signaux du système d'exploitation (SIGTERM, SIGINT, etc.): Peuvent interrompre l'exécution du programme depuis l'extérieur.
# Exemple simple de gestion du signal SIGINT (Ctrl+C) Signal.trap("INT") { puts "\nSignal SIGINT capturé. Fin..."; exit } loop { sleep 1 } -
Assertions (surtout en développement et en test): Mécanismes de vérification des conditions, qui, en cas de violation, lancent une exception ou effectuent une autre action. En Ruby, souvent implémentées avec des bibliothèques de test.
# Exemple avec la bibliothèque MiniTest require 'minitest/autorun' class MyTest < Minitest::Test def test_division # Assertion : le résultat de 4 divisé par 2 est 2 assert_equal 2, 4 / 2 # Assertion : la division par zéro doit lancer ZeroDivisionError assert_raises(ZeroDivisionError) { 1 / 0 } end end