try.. except... nem működik?
- Gábor
-
- Adminisztrátor
-
- Hozzászólások: 436
- Karma: 8
- Köszönetek: 70
Gábor válaszolt a témára: try.. except... tipuskonverzióra nem működik?
Én megtartanám ezt a témát, de ha nagyon akarod törlöm.
- robotech
-
- Haladó fórumozó
-
- Hozzászólások: 28
- Köszönetek: 0
robotech válaszolt a témára: try.. except... tipuskonverzióra nem működik?
Ez egy katasztrófa! Figyelmetlen voltam, főként talán azért is,mert az IDE nem ugrik a hiba helyére, ha megáll hibával a program.
Az eljárásban, ahol a lentebbi konverzió futott van egy művelet
elteres:=abs(homers-strtofloat(form1.modules[lekermodulszam].curr_t))
ahol szintén Stringből Float-ba történik a konverzió, és természetesen ennél a stringnél is el kell játszani, hogy vajon a decimal point , vagy . Ez viszont kimaradt, főleg mivel korábbi verzióban egyezményesen ',' volt a decimal point...
Ilyen szempontból a fórum témája értelmét vesztette, hiszen nem a try... exceptnél volt a baj, esetleg érdemes lehet a témát megszüntetni?
Köszönöm a segítséget mindenesetre!
- robotech
-
- Haladó fórumozó
-
- Hozzászólások: 28
- Köszönetek: 0
robotech válaszolt a témára: try.. except... tipuskonverzióra nem működik?
Delphi tutorials szerint betettem a megfelelő idevágó hibakezelést:
nemsiker:=false;
try
homers:=strtofloat(temp);
except
on Exception : EConvertError do begin
write_diaglog('Sikertelen tipuskonverzio strtofloat:'+Exception.Message,'APPLICATION');
homers:=0;
nemsiker:=true;
end;
end;
Annyi változás most már van, hogy legalább az Except lefut (tegnap még nem volt hajlandó a diagnosztikai filebe se beleírni. Most beleír, azonban a hibaüzenet feldobja a képernyőre.
Diaglog:
2018. 04. 11. 9:08:08 - Alkalmazás elindul.
2018. 04. 11. 9:08:12 - Sikertelen tipuskonverzio strtofloat:"25.90" is an invalid float
A Debugger Settingst átnéztem, csatoltam, úgy van beállítva ahogy írtad.
Azonban továbbra sem ugrik oda a kérdéses sorra, ha Cancel-t nyomok a felugró ablakban...
- Gábor
-
- Adminisztrátor
-
- Hozzászólások: 436
- Karma: 8
- Köszönetek: 70
Gábor válaszolt a témára: try.. except... tipuskonverzióra nem működik?
Tipp: Nézd meg a menüből indulva a "Projekt / Projekt beállításai / Fordító beállításai / Hibakeresés" lapon, hogy be vannak-e kapcsolva a következők:
- "Hibakeresési információk létrehozása a GDB számára (lassabb / nagyobb exe-méret)"
- "Sorszámok megjelenítése a futási hibák esetén (-gl)"
Ne legyen bekapcsolva a következő:
- "Szimbólumok eltávolítása a futtatható állományból (-Xs)"
- Gábor
-
- Adminisztrátor
-
- Hozzászólások: 436
- Karma: 8
- Köszönetek: 70
Gábor válaszolt a témára: try.. except... tipuskonverzióra nem működik?
A lényeg, hogy a minden kivételt kezelni kell, annak típusa szerint vagy általánosan.
nemsiker:=false;
try
homers:=strtofloat(temp);
except
on EConvertError do nemsiker:=true; // Itt és most bemutatásképpen csak az EConvertError típusú kivétel kezelése történik meg, minden más továbbra is fennálló hibaként "nyilván van tartva"
end;
if nemsiker then begin
try
temp:=stringreplace(temp, '.', ',',[rfReplaceAll, rfIgnoreCase]); //kicseréljük a . vesszőre
homers:=strtofloat(temp);
except
on E:Exception do ShowMessage('Sikertelen string-szám konverzió hofokriasztaschk-nal'); // Itt és most bemutatásképpen minden hiba kezelése egyben történik és megjelenik a saját üzenet, de további problémákat az eddigi hibák már nem okoznak
end;
end;
A kivételek kezelésével kapcsolatban olvasd el a FreePascal súgójának Exceptions című részét.
- robotech
-
- Haladó fórumozó
-
- Hozzászólások: 28
- Köszönetek: 0
robotech válaszolt a témára: try.. except... tipuskonverzióra nem működik?
Ami még a hibaüzenet érdekessége, hogy Debug alatt ugye amikor megáll hibával, akkor oda szokott ugrani az editor ahol megállt, most viszont nem látom / nem mutatja pontosan a sort, hogy hol állt meg...
(azonban tipuskonverziót csak egy eljárásban hívok meg, amely eljárásban mindkettő try..except ben van. ha az eljárást ki perjelezem // akkor a program lefut)
- robotech
-
- Haladó fórumozó
-
- Hozzászólások: 28
- Köszönetek: 0
robotech létrehozta a témát: try.. except... tipuskonverzióra nem működik?
Nem egy bonyolult dolgot szeretnék csinálni, de lefordítás után a program mindig hibát dob, akkor is, ha nem az IDE-ben indítom, hanem EXE-ként:
Try... except.. közé beírok egy string konverziót float-á. Ha nem tudná elvégezni, akkor a stringben lévő decimal pointot átalakítom vesszőre, mert ugye más más pc-ken ez a beállítás eltérő lehet.
De hiába van TRY... except-ben mégis mindíg hibát dob: "28.2 is an Invalid Float press ok to ignore, press cancel to kill the program". itt még az is vicces, hogy OK után sem folytatja a procedure lefutását amiben ez a pár sor benne van...
Mi lehet a baj? hogyan lehetne akkor ezt a feladatot megcsinálni?
(A temp és a hofok azok globális shortstringek)
var f : textfile;
homers : single;
elteres : single;
nemsiker: boolean;
temp:=hofok;
//a stringben kapott hőfokot átkonvertálnánk float-ra (single)
nemsiker:=false;
try
homers:=strtofloat(temp);
except
nemsiker:=true;
end;
if nemsiker then begin
try
temp:=stringreplace(temp, '.', ',',[rfReplaceAll, rfIgnoreCase]); //kicseréljük a . vesszőre
homers:=strtofloat(temp);
except
write_diaglog('Sikertelen string-szám konverzió hofokriasztaschk-nal','APPLICATION');
end;
end;
Köszönöm a segítéget előre is!