You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Pascal中捕获函数/过程执行失败的错误?

嘿,我懂你想要的效果——就像你在PHP里检查SQL查询返回值那样,在Pascal里也想自己捕获函数/过程的执行失败,而不是让程序直接崩掉对吧?下面给你几种实用的实现方法:

在Pascal中实现自定义错误检查的常见方式

1. 自定义函数返回状态(最贴近你的PHP习惯)

Pascal的函数可以返回特定值来标识执行结果,比如布尔值或者自定义的枚举类型。你可以模仿PHP里mysqli_query返回false的逻辑,自己封装函数:

// 示例:封装一个数据库查询函数,返回布尔值表示成功/失败
function ExecSQLQuery(const Conn: TSQLConnection; const QueryStr: string): Boolean;
begin
  Result := True;
  try
    // 执行查询操作
    Conn.Execute(QueryStr);
  except
    // 捕获执行过程中抛出的异常,标记为失败
    Result := False;
  end;
end;

调用的时候就完全符合你设想的结构:

if not ExecSQLQuery(MyDBConn, 'SELECT * FROM something') then
  WriteLn('Error!')
else
  // 执行后续正常逻辑

2. 捕获库函数的异常(Pascal标准错误处理方式)

大部分Pascal标准库或第三方库的函数/过程,执行失败时会抛出异常而不是返回错误值。这时候你可以用try-except块捕获异常,避免程序崩溃,还能拿到详细错误信息:

比如文件操作的例子:

var
  MyFile: TextFile;
begin
  try
    // 尝试执行可能失败的操作
    AssignFile(MyFile, 'data.txt');
    Reset(MyFile);
    // 到这里说明操作成功,继续后续逻辑
    Writeln('File opened successfully!');
  except
    on E: EInOutError do
      Writeln('Error opening file: ', E.Message); // 捕获文件操作异常
    on E: Exception do
      Writeln('Unknown error: ', E.Message); // 捕获其他所有异常
  end;
end;

这种方式比单纯返回布尔值更灵活,能区分不同类型的错误,还能获取错误详情。

3. 使用错误代码(适配老旧API)

如果是调用一些传统的Pascal底层函数,它们可能会通过全局变量或传入的变量返回错误代码。比如某些系统API:

var
  ErrorCode: Integer;
begin
  // 调用函数时传入错误代码变量
  SomeLegacyAPIFunction(ErrorCode);
  if ErrorCode <> 0 then
    Writeln('Error occurred! Code: ', ErrorCode)
  else
    // 执行正常逻辑
end;

不过这种方式现在用得比较少,异常处理的可读性和灵活性都更强。

总结

  • 自己写函数时,优先用返回布尔值/枚举的方式,逻辑和你熟悉的PHP错误检查完全一致;
  • 调用库函数时,try-except捕获异常是Pascal的标准做法,能有效避免程序崩溃;
  • 老旧API可能需要检查错误代码,记得对应查看文档里的错误码定义。

内容的提问来源于stack exchange,提问作者Khang

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:35:29