try...except does hit you with a speed penalty, but only if you make use of the except.

Code:
var
   count : integer;
   loop : integer;
   start : cardinal;

   fred : TLabel;
begin

     count:=0;
     fred:=nil;

     start:=getTickCount;

     for loop:=1 to 1000000 do
         begin
              inc(count);

              if &#40;fred<>nil&#41; then
                 fred.caption&#58;='Hello';
         end;

     memo1.lines.add&#40;'No Try &#58; '+intToStr&#40;getTickCount-start&#41;&#41;;

     count&#58;=0;

     start&#58;=getTickCount;
     for loop&#58;=1 to 1000000 do
         begin
              try
                 inc&#40;count&#41;;

                 fred.caption&#58;='Hello';
              except
              end;
         end;

     memo1.lines.add&#40;'Try &#58; '+intToStr&#40;getTickCount-start&#41;&#41;;
end;
This code snippet... the first loop executes in between 0-10 ticks, the second takes around the 270-290 tick mark. If all references to fred are removed, then they execute in the same time.

My quick test was compiled with Delphi 5 and was done on an Athlon 800.