Форум: "Начинающим";
Текущий архив: 2012.03.11;
Скачать: [xml.tar.bz2];
Внизtry except end; Найти похожие ветки
← →
Vyacheslav (2011-11-28 03:08) [0]var n:integer;
...
try
n:=StrToInt("d");
except
end;
Выдаёт ошибку. Нужны какие-либо директивы компилятора?
← →
Vyacheslav (2011-11-28 03:09) [1]Или может переписать свою StrToInt с использованием val?
Что вобщем посоветуете для безовпасного конверта?
← →
KilkennyCat © (2011-11-28 04:29) [2]StrToIntDef
и смысл использовать except без обработки?
← →
Vyacheslav (2011-11-28 04:33) [3]Спасибо.
> и смысл использовать except без обработки?
n имела начальное значение. Обработка нужна, не спорю, я её пропустил дабы не нагромождать код примера.
← →
KilkennyCat © (2011-11-28 05:36) [4]
> я её пропустил дабы не нагромождать код примера.
ну и в результате ты показал в примере, что отдал ошибку на обработку кому угодно, но только не себе.
← →
brother © (2011-11-28 06:51) [5]> Выдаёт ошибку.
какую?
← →
sniknik © (2011-11-28 08:18) [6]> я её пропустил дабы не нагромождать код примера.
код примера должен быть реальным, что показано то и обсуждается, без исключений. если код большой и его нужно корректировать "под форум" то пишется тестовая программка где предварительно и проверяется именно "тот код", для форума, и обсуждается тогда все одно он, реальный код из реального примера.
по другому, вы фактически обманываете тех к кому как бы пришли за советом...
← →
И. Павел © (2011-11-28 09:03) [7]> [0] Vyacheslav (28.11.11 03:08)
Еще есть функция TryStrToInf. Она возвращает false, если преобразование осуществить не удалось. Обычно в коде удобно ее использовать, если нужно обрабатывать ошибки преобразования и при этом не хочется, чтобы отладчик реагировал на каждую из них, но и не хочется отключать отслеживание этого типа ошибок вообще.
Если в блоке except у вас что-то есть, то удобно будет использовать TryStrToInt.
← →
И. Павел © (2011-11-28 09:10) [8]TryStrToInf —> TryStrToInt
← →
Vyacheslav (2011-11-28 17:04) [9]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
---------------------------
Всё же для полной ясности почему появляется ошибка? Как её избежать?
← →
Anatoly Podgoretsky © (2011-11-28 17:05) [10]> Vyacheslav (28.11.2011 17:04:09) [9]
Когда учиться начнешь?
← →
Юрий Зотов © (2011-11-28 17:15) [11]> Vyacheslav (28.11.11 17:04) [9]
> почему появляется ошибка?
Потому что программа запущена из Delphi - под отладчиком. Если запустить сам EXE, то ошибки не будет.
> Как её избежать?
Никак не надо ее избегать. Можно, конечно, отключить реакцию отладчика на этот вид исключений, но лучше этого не делать.
← →
DiamondShark © (2011-11-28 17:16) [12]
> Всё же для полной ясности почему появляется ошибка?
Потому что "d" не является целым числом.
> Как её избежать?
Передать строку, представляющую целое число. Например, "123".
← →
DiamondShark © (2011-11-28 17:24) [13]
> Юрий Зотов © (28.11.11 17:15) [11]
> Потому что программа запущена из Delphi - под отладчиком.
Зачем вы обманываете?
В строкеn:=StrToInt("d");
ошибка появляется вне зависимости от того, запущена ли программа под отладчиком, или нет.
> Если запустить сам EXE, то ошибки не будет.
Ошибка будет.
Не будет диалога с сообщением.
Вы оказываете медвежью услугу, отвечая не на тот вопрос, который вас спросили.
Именно из-за таких услужливых телепатов плодяться верующие в то, что except "устраняет ошибки".
← →
Vyacheslav (2011-11-28 17:28) [14]Из всего списка KilkennyCat, И. Павел, Юрий Зотов повели себя адекватно. Остальные просто массовка амбиций.
Почему бы не удалить ветку «Начинающим», если никто более не в состоянии или не имеет желания ответить на вопрос, что ошибка выскакивает только под отладчиком? В примерах, что я нашёл в поисковых системах 90% просто перекопированы с одного источника и совершенно не упоминается о настройках или директивах компилятора для избежания этой ошибки в момент отладки.
← →
Anatoly Podgoretsky © (2011-11-28 17:30) [15]
> Ошибка будет.
> Не будет диалога с сообщением.
Только речь про другую ошибку
> Debugger Exception Notification
При запуске ехе данной ошибки не будет
← →
Vyacheslav (2011-11-28 17:32) [16]DiamondShark
Позвольте, вы так же и заказчикам обьясняете, что ошибка будет? Зачем такие дебри?!
В 90% случаев конверт из string в integer - "опасная" ситуация, которую надо обработать не прервав исполнение программы и обязательно получив подтверждение или опровержение успешности операции. Зачем нужно что-то ещё?
← →
Anatoly Podgoretsky © (2011-11-28 17:34) [17]
> При запуске ехе данной ошибки не будет
И по коду ошибки рантайм тоже не будет.
> except
> n:=0;
> end;
Другое дело что очень некрасиво, автора не красит. Но ему бы пусть хоть как, но работает.
← →
Anatoly Podgoretsky © (2011-11-28 17:35) [18]> Vyacheslav (28.11.2011 17:32:16) [16]
А где здесь опровержение, тут голову в песок
← →
Vyacheslav (2011-11-28 17:40) [19]Anatoly Podgoretsky вы правы.
Я поэтому и отписал "Что вобщем посоветуете для безовпасного конверта?"
Ранее не знал о существовании:
StrToIntDef
TryStrToInt
Думал, что всё подобное делается с помошью
try
except
end;
>Другое дело что очень некрасиво, автора не красит. Но ему бы пусть хоть как, но работает.
Ну почему сразу хоть как!? Было бы "хоть как", то было бы просто - одна строка:
n:=StrToInt("d");
← →
Anatoly Podgoretsky © (2011-11-28 17:41) [20]> Vyacheslav (28.11.2011 17:40:19) [19]
Правильно, в данном случае TryStrToInt
← →
Vyacheslav (2011-11-28 17:42) [21]Ох нет!
поправка:
* Ну почему сразу хоть как!? Было бы "хоть как", то было бы просто - одна строка:
* n:=StrToInt(s);
← →
Vyacheslav (2011-11-28 17:44) [22]> Правильно, в данном случае TryStrToInt
Anatoly Podgoretsky
Cпасибо! Теперь всё ясно.
← →
Юрий Зотов © (2011-11-28 19:03) [23]
> DiamondShark © (28.11.11 17:24) [13]
Вы гениально уточнили мой ответ. Большое Вам спасибо.
Все остальное Вам уже сказал автор вопроса. Добаить могу лишь одно: LOL!
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2012.03.11;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.003 c