Welche Mechanismen gibt es, um die Arbeit eines Teils des Projekts zu stören?
sobes.tech KI
Antwort von AI
-
Ausnahmen (Exceptions): Ermöglichen es, die Ausführung des Codes bei einem Fehler zu stoppen und die Kontrolle an die Blöcke
begin/rescue/ensurezu übertragen.begin # Code, der einen Fehler verursachen kann result = 1 / 0 rescue ZeroDivisionError => e # Behandlung eines spezifischen Fehlers puts "Fehler bei Division durch Null: #{e.message}" # Mögliche Protokollierung oder alternative Ausführung rescue StandardError => e # Behandlung anderer Standardfehler puts "Ein anderer Fehler ist aufgetreten: #{e.message}" ensure # Code, der immer ausgeführt wird, unabhängig vom Fehler puts "Block beendet" end -
Raise: Explizites Auslösen einer Ausnahme, sowohl für Standard- als auch für benutzerdefinierte Fehlerklassen.
# Normales Auslösen einer Ausnahme raise "Etwas ist schief gelaufen" # Auslösen mit einer bestimmten Fehlerklasse raise MyCustomError, "Ungültiger Wert" -
exit,abort,Kernel#exit!: Methoden zum Beenden des Programms.exit!beendet das Programm sofort, ohneat_exit-Handler aufzurufen.# Normales Beenden des Programms exit(0) # 0 bedeutet erfolgreicher Abschluss # Beenden mit Fehler abort("Beendet wegen kritischem Fehler") # Erzwingendes Beenden Kernel.exit!(1) -
Thread#raise: Ermöglicht das Auslösen einer Ausnahme in einem anderen Ausführungsthread.
thread = Thread.new do begin loop { sleep 1 } rescue => e puts "Thread abgefangen: #{e.class}" end end sleep 2 thread.raise StandardError, "Thread stoppen" thread.join -
Programmierfehler (logisch, syntaktisch): Schlechter geschriebenen Code kann zu Laufzeitfehlern führen.
# Syntaxfehler (fehlendes end) def my_method puts "Hallo" # Logischer Fehler (Endlosschleife) while true puts "Schleife" end -
Betriebssystemsignale (SIGTERM, SIGINT usw.): Können die Programmausführung von außen unterbrechen.
# Einfaches Beispiel für die Behandlung des SIGINT-Signals (Strg+C) Signal.trap("INT") { puts "\nSIGINT empfangen. Beenden..."; exit } loop { sleep 1 } -
Assertions (besonders bei Entwicklung und Tests): Mechanismen zur Überprüfung von Bedingungen, bei Verletzung wird eine Ausnahme ausgelöst oder eine andere Aktion ausgeführt. In Ruby werden sie oft mit Testbibliotheken implementiert.
# Beispiel mit der MiniTest-Bibliothek require 'minitest/autorun' class MyTest < Minitest::Test def test_division # Behauptung: Das Ergebnis von 4 durch 2 ist 2 assert_equal 2, 4 / 2 # Behauptung: Division durch Null löst ZeroDivisionError aus assert_raises(ZeroDivisionError) { 1 / 0 } end end