AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Anfänger: Try&except Problem

Ein Thema von RunningUp · begonnen am 2. Mai 2010 · letzter Beitrag vom 2. Mai 2010
 
pixfreak

Registriert seit: 6. Jul 2007
112 Beiträge
 
Delphi XE3 Professional
 
#4

Re: Anfänger: Try&except Problem

  Alt 2. Mai 2010, 07:23
Zitat von RunningUp:
Ich bin ja Anfänger, und würde jetzt gerne wissen warum mein Except Block nicht ausgeführt wird.
Mir jetzt einen Code zu geben der funktioniert, hilft mir zwar dabei mein Programm zum laufen zu kriegen, der Lernfaktor ist aber nicht da.
Moin RunningUp,

warum funktioniert Deine if-Abrfrage mit dem try except Block nicht?.
Du baust die Abfrage ja ein, damit es in Deinem Programm zu keinem Problem kommt, wenn Du die Zahl durch null teilst. Normalerweise würde Dein Programm mit einem Laufzeitfehler beendet, nämlich "Division durch null". In dem Programm wird nun eine "Fehlerbehandlung" mit dem Namen EZeroDivide ausgelöst, die zur Anzeige des Fehlers führt.

Durch den try except Block sagst Du Deinem Compiler, dass in dem try Bereich vielleicht etwas nicht funktionieren oder schief laufen könnte, in Deinem Beispiel die Division durch null. Der except Block fängt die dort aufgeführten Fehler ab, bei der Version von Luckie genau die Division durch null. Wenn dieser Fehler auftritt, dann gibt er dem Label den Text mit, dass die Division nicht ging. Tritt allerdings kein Fehler auf (Division durch eine Zahl ungleich null), dann wird der except Block auch nicht ausgeführt.

Wenn Du in Deinem Programm nochmal genau nachsiehst, wird in Deinem try Block eine if-Abfrage durchgeführt. Die ist soweit korrekt, bzw. auch wenn hier eine Zahl null ist, tritt ja kein Fehler ein, es wird nur die Anweisung hinter dem then ausgeführt. Wenn die Bedingung falsch ist, also beide Zahlen ungleich null sind, dann wird der Befehl hinter dem then übersprungen. Aber ein Fehler, oder genauer eine Exception wird nicht nicht gefeuert und damit wird der except Block nicht durchlaufen.

Zur Lösung: Setze doch Deine Abfrage in eine if-then-else Konstruktion:
Delphi-Quellcode:
if (Zahl1 = 0) or (Zahl2 = 0) then
   Label5.Caption := 'Zahl 1 oder 2 ist 0, Division nicht möglich'
else
begin
   Ergebnis := Zahl1 / Zahl2;
   Label5.Caption := 'Division möglich, Ergebnis: ' + FloatToStrF (Ergebnis, FFNumber, 8, 2);
end;
Achte darauf, hinter der Zeile nach dem then kein Semikolon zu setzen (da falle ich immer wieder darauf rein... komme halt von C/C++). Der Block begin end hinter dem else ist nötig, weil Du mehr als eine Anweisung hast und die dadurch zusammen gefasst werden.

Die andere Variante wäre das Beispiel von Luckie.

Zitat:
Den Befehl " On E: EZeroDivide do " kenne auch Ich nicht, will ich momentan auch nicht kennen, ich möchte mit den Befehlen mein Programm realisieren die Ich bis jetzt kenne.
Das ist nichts anderes, als der Fehler, der beim teilen durch null auftritt. Und durch das On im except Block wird dieser Fehler abgefangen.

Zitat:
PS: Ich sagte ja das es da elegantere Lösungen gibt, Ich aber den Syntax anwenden will. If/elese kommt erst in nächsten Abschnitt
Hmm, ohne if/else oder das Abfangen einer Exception wird es schwer. Eine Möglichkeit wäre das setzen des Labels, dass es nicht geht und in der if-Abfrage prüfen, ob die Zahlen ungleich null sind. Wenn ja, dann das Label mit dem Ergebnis noch einmal überschreiben. Nicht schön, daher lese doch in Deinem Buch ruhig mal einen Abschnitt weiter und überdenke dann Dein Programm noch einmal. Ich denke, dass wird helfen.

Nur noch zur Logig: Luckie hat es bereits angesprochen, Du brauchst nur auf die Zahl2 zu achten, denn null kann durch irgendetwas außer null geteilt werden, was dann übrig bleibt...

Viel Text am Sonntagmorgen, hoffe ich konnte etwas Licht ins dunkle bringen.


VG Pixfreak
  Mit Zitat antworten Zitat
 


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 12:52 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz