Parsing TrySo8601ToDate生成异常

Parsing TrySo8601ToDate生成异常,parsing,delphi,delphi-10-seattle,Parsing,Delphi,Delphi 10 Seattle,DateUtils.TryISO8601ToDate('8',Result)生成异常。但是它是尝试!!!它的任务是在不抛出任何异常的情况下进行尝试 问题不在于DelphiIDE对此异常做出反应。问题是“Try”函数产生这样的异常,而不是返回true/false。我认为您可能需要调整IDE调试器选项 在IDE中转到工具|选项,并在调试器选项| Embarcadero调试器下面的语言异常选项卡上,取消选中通知语言异常框 选中该框后,调试器将在执行(或RTL)异常处理之前停止IDE中的执行。它会弹出一

DateUtils.TryISO8601ToDate('8',Result)
生成异常。但是它是尝试!!!它的任务是在不抛出任何异常的情况下进行尝试


问题不在于DelphiIDE对此异常做出反应。问题是“Try”函数产生这样的异常,而不是返回true/false。

我认为您可能需要调整IDE调试器选项

在IDE中转到工具|选项,并在调试器选项| Embarcadero调试器下面的语言异常选项卡上,取消选中
通知语言异常

选中该框后,调试器将在执行(或RTL)异常处理之前停止IDE中的执行。它会弹出一个拨号盘,询问您是要中断执行还是继续执行。如果选择后者,那么代码中的异常处理程序将执行

更新Tbh,随着你q的更新,我一点也不清楚你说的是什么问题。以下代码的哪一部分不符合您的期望/愿望,以及如何实现

procedure TForm1.TestISODates;
var
  S : String;
  DT : TDateTime;
begin
  DT := Now;
  S := DateToISO8601(DT, False);
  Caption := S;

  if TryISO8601ToDate(S, DT, False) then
    Caption := 'OK';

  S := 'banana';
  if TryISO8601ToDate(S, DT, False) then
    Caption := 'OK'
  else
    Caption := S + ' not ok';
end;

我认为您可能需要调整IDE调试器选项

在IDE中转到工具|选项,并在调试器选项| Embarcadero调试器下面的语言异常选项卡上,取消选中
通知语言异常

选中该框后,调试器将在执行(或RTL)异常处理之前停止IDE中的执行。它会弹出一个拨号盘,询问您是要中断执行还是继续执行。如果选择后者,那么代码中的异常处理程序将执行

更新Tbh,随着你q的更新,我一点也不清楚你说的是什么问题。以下代码的哪一部分不符合您的期望/愿望,以及如何实现

procedure TForm1.TestISODates;
var
  S : String;
  DT : TDateTime;
begin
  DT := Now;
  S := DateToISO8601(DT, False);
  Caption := S;

  if TryISO8601ToDate(S, DT, False) then
    Caption := 'OK';

  S := 'banana';
  if TryISO8601ToDate(S, DT, False) then
    Caption := 'OK'
  else
    Caption := S + ' not ok';
end;

是的,这些通知确实令人惊讶。@TomBrunberg:的确如此。就我个人而言,我发现它是所有Delphi默认设置中最令人恼火的一个,唯一的例外是
LogInPrompt
=True。当异常对话框弹出时,您也可以单击“忽略此异常”类型框,它不会再次弹出。您看到,问题不在于DelphiIDE对此异常做出反应。问题是“Try”函数产生了这样一个异常。@Paul,好的,现在我已经查看了源代码。正如我假设的,try变体调用非try变体,并将其包装在一个燕子中,所有try/除外。所以你所报道的毫无意义,我投票结束这个问题,因为报道的行为不能被复制。是的,那些通知确实令人惊讶。@TomBrunberg:的确如此。就我个人而言,我发现它是所有Delphi默认设置中最令人恼火的一个,唯一的例外是
LogInPrompt
=True。当异常对话框弹出时,您也可以单击“忽略此异常”类型框,它不会再次弹出。您看到,问题不在于DelphiIDE对此异常做出反应。问题是“Try”函数产生了这样一个异常。@Paul,好的,现在我已经查看了源代码。正如我假设的,try变体调用非try变体,并将其包装在一个燕子中,所有try/除外。因此,您所报告的内容毫无意义,因此我投票结束这个问题,因为报告的行为无法复制。他们在
ISO8601ToDate
之上实现
TryISO8601ToDate
,而不是反过来实现。。。。。草率,表明库开发人员缺乏凝聚力和经验。那些老头头在哪里做代码审查,会立即发现这样的错误?他们在
ISO8601ToDate
的基础上实现
TryISO8601ToDate
,而不是相反。。。。。草率,表明库开发人员缺乏凝聚力和经验。那些老头头在哪里做代码审查,他们会立即发现这样的错误?