Delphi 为什么没有捕捉到这个错误?

Delphi 为什么没有捕捉到这个错误?,delphi,uncaught-exception,try-except,Delphi,Uncaught Exception,Try Except,我有一个程序,模拟骰子滚动,并将其与图表(一组字符串列表)中的值进行比较。我目前从TEdit获取值。如果该框为空,则会引发一个EConvertError,应该由我的Try/Except语句捕获,但它不是。想法和建议?下面的代码,Delphi7 try //Shooting if ShootingRadio.Checked then BS := StrToInt(Edit1.Text); Randomize; Roll := RandomRange(1,7); Labe

我有一个程序,模拟骰子滚动,并将其与图表(一组字符串列表)中的值进行比较。我目前从TEdit获取值。如果该框为空,则会引发一个EConvertError,应该由我的Try/Except语句捕获,但它不是。想法和建议?下面的代码,Delphi7

try
  //Shooting
  if ShootingRadio.Checked then
    BS := StrToInt(Edit1.Text);
  Randomize;
  Roll := RandomRange(1,7);
  Label3.Caption := IntToStr(Roll);
  if (Roll < StrToInt(ShootingHitChart[BS-1])) then
  begin
    Label3.Caption := (IntToStr(Roll)+' Miss');
    RichView1.AddTextNL((IntToStr(Roll)+' Miss'),7,0,1);
    RichView1.Reformat;
  end
  else
  begin
    Label3.Caption := (IntToStr(Roll)+' Hit');
    RichView1.AddTextNL((IntToStr(Roll)+' Hit'),6,0,1);
    RichView1.Reformat;
  end;
except
    MessageBox(0,'No number entered.','Error',mb_OK);
end;
试试看
//射击
如果是射击,那么检查
BS:=stroint(Edit1.Text);
随机化;
滚动:=随机范围(1,7);
标签3.标题:=IntToStr(滚动);
如果(滚动
在调试器选项中选中“停止Delphi异常”。异常实际上被捕获得很好,但是IDE在得到它时停止。当您继续运行时,将不会看到异常,而是看到您的消息。在IDE之外,它可以正常运行


您可以取消选中此选项(我通常会取消选中)。当您需要调试某个顽固问题时,您可以随时重新检查它。

如果您在没有调试器的情况下运行它(直接在windows中启动程序,而不是在Delphi中启动程序),它是否会捕获它?在if(ShootingRadio.Checked=True)和(TryStrToInt(Edit1.Text,BS))中更改stroint,然后开始。。。结束;如果在try和except之间引发异常,则将显示消息框。因此,我的结论是,没有提出任何例外。新的缩进有帮助吗?另请参见:我更喜欢在异常时中断。我想知道发生了什么事。引发大量异常的代码,这些异常确实用于流控制(Indy,我在看你)让我发疯。@WarrenP不确定7,但在最近的版本中,你可以选择一个要忽略的异常类型列表。如果这是正确答案,那么问题就错了!问题是异常处理程序没有运行!啊,想想看。@DavidHeffernan不幸的是,在代码周围放置
try..except
块也会导致IDE忽略该异常,这是一个常见的误解。我不止一次在各种场合看到过这个问题,从对这个问题的第一次评论来看,阿沃·穆罗姆阿吉也是。不幸的是,他没有把这个作为答案,我会接受的。