AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi [Quiz] welcher Exception Handler wird ausgeführt?
Thema durchsuchen
Ansicht
Themen-Optionen

[Quiz] welcher Exception Handler wird ausgeführt?

Ein Thema von mjustin · begonnen am 1. Apr 2015 · letzter Beitrag vom 2. Apr 2015
Antwort Antwort
mjustin

Registriert seit: 14. Apr 2008
3.006 Beiträge
 
Delphi 2009 Professional
 
#1

[Quiz] welcher Exception Handler wird ausgeführt?

  Alt 1. Apr 2015, 17:30
Delphi-Version: 2009
Und schon wieder ein Quiz zum Thema Exceptions. Gegeben sei dieser Quelltext:

Delphi-Quellcode:
program FunWithDelphi;
 
{$APPTYPE CONSOLE}
 
uses
  Controls, SysUtils;
 
begin
  try
    raise TMouse.Create;
  except
    on E:Exception do
    begin
      Writeln(E.Classname, ': E is Exception');
    end;
    on E:TObject do
    begin
      Writeln(E.Classname, ': E is TObject');
    end;
    on E:TMouse do
    begin
      Writeln(E.Classname, ': E is TMouse');
    end;
  end;
  ReadLn;
end.
Was wird geschehen?
  • das Programm gibt “TMouse: E is Exception” aus
  • das Programm gibt “TMouse: E is TObject” aus
  • das Programm gibt “TMouse: E is TMouse” aus
  • der Compiler stoppt mit einer Fehlermeldung
  • das Programm endet mit einem Laufzeitfehler

Wer es es richtig errät, darf natürlich hier posten was geschieht (und warum). Wer es nicht errät, drückt F5 im Browser bis die Antwort erscheint
Michael Justin

Geändert von mjustin ( 1. Apr 2015 um 17:32 Uhr) Grund: Delphi Version korrigiert
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#2

AW: [Quiz] welcher Exception Handler wird ausgeführt?

  Alt 1. Apr 2015, 17:44
Zitat:
das Programm gibt “TMouse: E is TObject” aus
Ist eigentlich logisch. TMouse ist nicht von Exception abgeleitet, von daher kann das nicht zutreffen und ansonsten zählt: Wer zuerst kommt, mahlt zuerst.
Ich wusste allerdings nicht dass man auch Nicht-Exception-Klassen raisen kann. Ich habe also ein bisschen geschummelt weil ichs ausprobiert habe :X
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#3

AW: [Quiz] welcher Exception Handler wird ausgeführt?

  Alt 1. Apr 2015, 19:23
Stimmt.

Joar, kann man ... drum ist System.ExceptObject auch ein TObject und keine Exception. (naja, abgesehn von der lage deren Definition ... SysUtils )
Wenn die Exception aus einer DLL kommt, dann ist es dort eine andere Exception-Klasse, wie im eigenen Modul ... im Grunde ist es da nichtmal mehr ein TObject, da ebenfalls unterschiedliche RTTI.

PS: Du hast das ELSE vergessen.
$2B or not $2B

Geändert von himitsu ( 1. Apr 2015 um 19:25 Uhr)
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.176 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

AW: [Quiz] welcher Exception Handler wird ausgeführt?

  Alt 1. Apr 2015, 19:40
Ich bin hin und hergerissen zwischen dem "TMouse: E is TObject" und einem Laufzeitfehler.
Ich glaube schon eher letzteres...


// Jetzt doch einmal ausprobiert. Interessant am Rande ist dass die IDE nicht anhält. Bei der ... TMouse.

Geändert von Der schöne Günther ( 1. Apr 2015 um 19:44 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#5

AW: [Quiz] welcher Exception Handler wird ausgeführt?

  Alt 1. Apr 2015, 20:20
Eine Exception in der Exceptionbehandlung ist auch immer was Schönes ... da beendet Windows gleich den kompletten Prozess, da Diese direkt und ungebremst bis zum Windows durchrauscht.

raise Exception(nil);
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von BUG
BUG

Registriert seit: 4. Dez 2003
Ort: Cottbus
2.094 Beiträge
 
#6

AW: [Quiz] welcher Exception Handler wird ausgeführt?

  Alt 1. Apr 2015, 20:48
Eine Exception in der Exceptionbehandlung ist auch immer was Schönes ... da beendet Windows gleich den kompletten Prozess, da Diese direkt und ungebremst bis zum Windows durchrauscht.
Ehrlich gesagt finde ich das legitim. Wenn an der Stelle Fehler auftreten, ist vermutlich eh alles verloren. Man könnte eventuell noch eine weitere Exception aus der Runtime-Bibliothek werfen, die garantiert fehlerfrei () ist. Wenn das auch noch fehlschlägt ... dann waren einem die Maschinengötter wohl nicht gnädig.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#7

AW: [Quiz] welcher Exception Handler wird ausgeführt?

  Alt 1. Apr 2015, 20:54
Ein Try-Except im Exception-Handling ... wir lieben doch unsere Endlosschleifen.
$2B or not $2B
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.006 Beiträge
 
Delphi 2009 Professional
 
#8

AW: [Quiz] welcher Exception Handler wird ausgeführt?

  Alt 2. Apr 2015, 11:26
// Jetzt doch einmal ausprobiert. Interessant am Rande ist dass die IDE nicht anhält. Bei der ... TMouse.
Das hatte mich auch überrascht. Die Delphi Dokumentation benennt sogar eine Exceptionklasse in der VCL, die nicht von SysUtils.Exception abgeleitet ist: OutlineError. Die würde in einem except on Exception (...) nicht behandelt, sondern nur im else oder wenn man auch on TObject oder explizit mit on OutlineError.
Michael Justin
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:35 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz