Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


Problem med felhantering

Postades av 2003-02-18 09:52:24 - Staffan Berg, i forum delphi, Tråden har 9 Kommentarer och lästs av 2188 personer

Hej!

Jag håller på att testa en felhanteringsrutin i Delphi.
Får inte detta till att fungera:

var a:double;

begin
try
a := 6 / 0;
except
Showmessage('division med noll');
end;
end;

Vad är det för fel?


Svara

Sv: Problem med felhantering

Postades av 2003-02-18 10:11:17 - Sven Åke Persson

Av någon underlig anledning så alstras det inget fel vid kod nedan
Try aktiveras aldrig.

var a:Single;
begin
a := 6 / 0;
Showmessage('division med noll');
end;

/Sven


Svara

Sv: Problem med felhantering

Postades av 2003-02-18 13:13:07 - Staffan Berg

Överhuvudtaget så fungerar ingen felhantering i Delphi på min burk.
Har provat med alla möjliga "try..except"-exempel jag plockat från nätet.

Någon inställning i Delphi 6 som jag missat, kanske???


Svara

Sv: Problem med felhantering

Postades av 2003-02-18 15:25:30 - Sven Åke Persson

Hej
Kör Delphi 5 ,samma där,himla märkligt
division med 0(Noll) borde vara det säkraste testet.

Logga in någon expert och red ut problemmet.
/Sven


Svara

Sv: Problem med felhantering

Postades av 2003-02-18 23:11:58 - Jonas Svensson

För det första, används inte variablerna kan koden optimeras bort(berorende på vilka kompilator inställningar du gjort).

// Genererar inget exception eftersom a aldrig används
var
a: double;
b: integer;
begin
b := 0;
a := a / b;
end;


//Men nu skapas ett exception eftersom a används
var
a: double;
b: integer;
begin
b := 0;
a := a / b;
ShowMessage(FloatToStr(a));
end;

Ditt exempel genererar nog inget exception pga att a räknas ut vid kompilerigen och blir en konstant satt till INF(Infinity), .
var a:double;
begin
try
a := 6 / 0;
except
Showmessage('division med noll');
end;
ShowMessage(FloatToStr(a));//Visar antagligen att a är satt till INF
end;

Stänger man av exceptions vilket ibland görs vid krävande flyttalsoperationer så...

var
a: double;
begin
Set8087CW(Default8087CW or $3F);//Ser till så att inga exceptions skapas
try
a := a / 0;
except
ShowMessage('fel');
end;
ShowMessage(FloatToStr(a));//Visar INF
a := 0 / 0;
ShowMessage(FloatToStr(a));//Visar Nan
end;


Mer att läsa om Infinity NAN och andra roliga saker ;-).
http://homepages.borland.com/efg2lab/Mathematics/NaN.htm


Svara

Sv: Problem med felhantering

Postades av 2003-02-18 23:39:55 - Staffan Berg

Tack för denna utförliga information, Q.

Jag upptäckte att ett Exception genereras med nedanstående kod när jag kör exe-filen ensam, alltså utanför Delphi.

var a:double;
begin
try
a := 6 / 0;
except
Showmessage('division med noll');
end;
ShowMessage(FloatToStr(a));//Visar antagligen att a är satt till INF
end;


Däremot genereras inget Exception när jag kör koden inuti Delphi.
Kan man dra slutsatsen att när exe-filen är kompilerad och körs av sig själv så fungerar felhanteringen, inte annars?

Lite konstigt, tycker jag...


Svara

Sv: Problem med felhantering

Postades av 2003-02-19 11:46:36 - Jonas Svensson

>Däremot genereras inget Exception när jag kör koden inuti Delphi.
Tja koden genererar inga exceptions på min dator Delphi 5 och Delphi 7 varken i Delphi eller utanför. Antar att detta beror på att a blir en konstant vid kompileringen så det kommer inte att utföras någon division i runtime.

uses
Math;

const
b = 1.0 / 0.0;
var
a:double;
begin
if IsInfinite(b) then
Showmessage('b = infinite value');

a := 6 / 0;
if IsInfinite(a) then
Showmessage('a = infinite value');
end;


>så fungerar felhanteringen, inte annars?
Tycker det är lite konstigt att du får exceptions med exemplet. Felet borde isåfall uppstå vid kompileringen.

Tex genererar detta ett fel vid kompilering:
var
a: integer;
begin
a := 1 div 0;
end;

Men används flyttal så blir a istället INF(Infinity=ändlös).

>Lite konstigt, tycker jag...
Flyttal är lite konstiga :-)
Jag är inte så hemma på detta därav blir nog min förklaring lite dålig.


Något som du kan kolla är inställningarna för debuggern (Menyn Tools -> Debugger options) där kan du ställa hur debuggern ska hantera exceptions.


Svara

Sv: Problem med felhantering

Postades av 2003-02-19 12:31:31 - Staffan Berg

Nu blev jag lite osäker om jag postade rätt kod eller inte...

Hur-som-helst...med denna kod får jag ett Exception när jag kör exefilen ensam, men inte i Delphi...

<code>
var
a,b,c:integer;

begin

a := 8;
b := 9;
c := 0;
try
a := b div c;
edit1.Text := inttostr(a);
except
on EZeroDivide do
showmessage('division med noll');
end;
end;
</code>

Jag tittade lite i Debugger Options och där finner jag ju en del inställningar. Jag har emellertid aldrig ändrat i någon av dessa så mina inställningar är enligt standard.


Svara

Sv: Problem med felhantering

Postades av 2003-02-19 14:46:46 - Jonas Svensson

hmm konstigt. Jag får exception i båda fallen.

Du ska använda EDivByZero istället för EZeroDivide om du vill visa ett eget felmedellande. Som koden är nu kommer du inte fånga felet(b div c) .


Svara

Sv: Problem med felhantering

Postades av 2003-02-19 21:02:34 - Staffan Berg

Tack för tipset!

Med EZeroDivide uppenbarar sig en ruta med engelsk text (division by zero). Bättre då att använda EDivByZero som du föreslog.
Alltid lär man sig något nytt...


Svara

Nyligen

  • 09:09 Vill du köpa medicinska tester?
  • 12:47 Vem beviljar assistansen – kommune
  • 14:17 Någon med erfarenhet av hemstädnin
  • 14:14 Bör man använda sig av en båtförme
  • 14:12 Finns det någon intressant hundblo
  • 14:25 Tips på verktyg för att skapa QR-k
  • 14:23 Tips på verktyg för att skapa QR-k
  • 20:52 Fungerer innskuddsbonuser egentlig

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 569 169
27 952
271 704
1 315
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies