Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

try except end; [D7, 2003]


Страницы:   1 2

Vyacheslav ©   (2011-11-28 03:08:00) 

var n:integer;
...
try
n:=StrToInt('d');
except
end;

Выдаёт ошибку. Нужны какие-либо директивы компилятора?


Юрий Зотов   (2011-11-28 19:03:00) [1]


> DiamondShark ©   (28.11.11 17:24) [13]

Вы гениально уточнили мой ответ. Большое Вам спасибо.

Все остальное Вам уже сказал автор вопроса. Добаить могу лишь одно: LOL!


Vyacheslav   (2011-11-28 17:44:00) [2]

> Правильно, в данном случае TryStrToInt
Anatoly Podgoretsky
Cпасибо! Теперь всё ясно.


Vyacheslav   (2011-11-28 17:42:00) [3]

Ох нет!
поправка:

* Ну почему сразу хоть как!? Было бы "хоть как", то было бы просто - одна строка:
* n:=StrToInt(s);


Anatoly Podgoretsky   (2011-11-28 17:41:00) [4]

> Vyacheslav  (28.11.2011 17:40:19)  [19]

Правильно, в данном случае TryStrToInt


Vyacheslav   (2011-11-28 17:40:00) [5]

Anatoly Podgoretskyвы правы.
Я поэтому и отписал "Что вобщем посоветуете для безовпасного конверта?"
Ранее не знал о существовании:
StrToIntDef
TryStrToInt
Думал, что всё подобное делается с помошью
try
except
end;

>Другое дело что очень некрасиво, автора не красит. Но ему бы пусть хоть как, но работает.
Ну почему сразу хоть как!? Было бы "хоть как", то было бы просто - одна строка:
n:=StrToInt('d');


Anatoly Podgoretsky   (2011-11-28 17:35:00) [6]

> Vyacheslav  (28.11.2011 17:32:16)  [16]

А где здесь опровержение, тут голову в песок


Anatoly Podgoretsky   (2011-11-28 17:34:00) [7]


> При запуске ехе данной ошибки не будет

И по коду ошибки рантайм тоже не будет.

>  except
>    n:=0;
>  end;

Другое дело что очень некрасиво, автора не красит. Но ему бы пусть хоть как, но работает.


Vyacheslav   (2011-11-28 17:32:00) [8]

DiamondShark
Позвольте, вы так же и заказчикам обьясняете, что ошибка будет? Зачем такие дебри?!
В 90% случаев конверт из string в integer - "опасная" ситуация, которую надо обработать не прервав исполнение программы и обязательно получив подтверждение или опровержение успешности операции. Зачем нужно что-то ещё?


Anatoly Podgoretsky   (2011-11-28 17:30:00) [9]


> Ошибка будет.
> Не будет диалога с сообщением.

Только речь про другую ошибку

> Debugger Exception Notification

При запуске ехе данной ошибки не будет


Vyacheslav   (2011-11-28 17:28:00) [10]

Из всего списка KilkennyCat, И. Павел, Юрий Зотовповели себя адекватно. Остальные просто массовка амбиций.

Почему бы не удалить ветку «Начинающим», если никто более не в состоянии или не имеет желания ответить на вопрос, что ошибка выскакивает только под отладчиком? В примерах, что я нашёл в поисковых системах 90% просто перекопированы с одного источника и совершенно не упоминается о настройках или директивах компилятора для избежания этой ошибки в момент отладки.


DiamondShark   (2011-11-28 17:24:00) [11]


> Юрий Зотов ©   (28.11.11 17:15) [11]
> Потому что программа запущена из Delphi - под отладчиком.

Зачем вы обманываете?
В строке
  n:=StrToInt('d');
ошибка появляется вне зависимости от того, запущена ли программа под отладчиком, или нет.


>  Если запустить сам EXE, то ошибки не будет.

Ошибка будет.
Не будет диалога с сообщением.

Вы оказываете медвежью услугу, отвечая не на тот вопрос, который вас спросили.
Именно из-за таких услужливых телепатов плодяться верующие в то, что except "устраняет ошибки".


DiamondShark   (2011-11-28 17:16:00) [12]


> Всё же для полной ясности почему появляется ошибка?

Потому что 'd' не является целым числом.


> Как её избежать?

Передать строку, представляющую целое число. Например, '123'.


Юрий Зотов   (2011-11-28 17:15:00) [13]

> Vyacheslav   (28.11.11 17:04) [9]

> почему появляется ошибка?

Потому что программа запущена из Delphi - под отладчиком. Если запустить сам EXE, то ошибки не будет.

> Как её избежать?

Никак не надо ее избегать. Можно, конечно, отключить реакцию отладчика на этот вид исключений, но лучше этого не делать.


Anatoly Podgoretsky   (2011-11-28 17:05:00) [14]

> Vyacheslav  (28.11.2011 17:04:09)  [9]

Когда учиться начнешь?


Vyacheslav   (2011-11-28 17:04:00) [15]

StrToIntDef
TryStrToInt
отличные интструменты!

Вот полный код проекта:
unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls;

type
 TForm1 = class(TForm)
   Button1: TButton;
   procedure Button1Click(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var n:integer;
begin
 try
   n:=StrToInt('d');
 except
   n:=0;
 end;
end;

end.


При нажатии Button1 вылетает следующая ошибка:
---------------------------
Debugger Exception Notification
---------------------------
Project Project1.exe raised exception class EConvertError with message ''d' is not a valid integer value'. Process stopped. Use Step or Run to continue.
---------------------------
OK   Help  
---------------------------

Всё же для полной ясности почему появляется ошибка? Как её избежать?


И. Павел   (2011-11-28 09:10:00) [16]

TryStrToInf —> TryStrToInt


И. Павел   (2011-11-28 09:03:00) [17]

> [0] Vyacheslav   (28.11.11 03:08)

Еще есть функция TryStrToInf. Она возвращает false, если преобразование осуществить не удалось. Обычно в коде удобно ее использовать, если нужно обрабатывать ошибки преобразования и при этом не хочется, чтобы отладчик реагировал на каждую из них, но и не хочется отключать отслеживание этого типа ошибок вообще.
Если в блоке except у вас что-то есть, то удобно будет использовать TryStrToInt.


sniknik   (2011-11-28 08:18:00) [18]

> я её пропустил дабы не нагромождать код примера.
код примера должен быть реальным, что показано то и обсуждается, без исключений. если код большой и его нужно корректировать "под форум" то пишется тестовая программка где предварительно и проверяется именно "тот код", для форума, и обсуждается тогда все одно он, реальный код из реального примера.

по другому, вы фактически обманываете тех к кому как бы пришли за советом...


brother   (2011-11-28 06:51:00) [19]

> Выдаёт ошибку.

какую?


KilkennyCat   (2011-11-28 05:36:00) [20]


> я её пропустил дабы не нагромождать код примера.

ну и в результате ты показал в примере, что отдал ошибку на обработку кому угодно, но только не себе.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо