delphi - 交易: except or on e:exception?

标签 delphi

两者之间到底有什么区别(以及使用什么):

try
  UniTransaction1.Commit;
except
  UniTransaction1.Rollback;
end;

和:

try
  UniTransaction1.Commit;
except
  on E:exception do
    UniTransaction1.Rollback;
end;

“异常(exception)”不是已经是异常(exception)了吗?

最佳答案

前者将捕获作为异常引发的所有对象,后者仅捕获从 Exception 类派生的对象。

它不是很出名,但 Delphi 确实可以引发不是从 Exception 派生的异常。也就是说,您完全可以自由地使用并非派生自 Exception 的对象引发异常。在实践中,我还没有遇到过这样的事情。您根本看不到引发任何不是从 Exception 派生的代码。就所有意图和目的而言,这意味着这两个变体的行为将相同。

由于您没有引用异常对象,因此似乎不需要声明一个从未使用过的变量。这给我们带来了另一种选择:

on Exception do
  .... 

这将捕获与第二个变体相同的所有异常,但不会声明可以引用异常对象的变量。

您应该使用哪一个?您可以使用它们中的任何一个并具有相同的行为,当然前提是您没有遇到不是从 Exception 派生的异常。如果是我,我会选择你的第一个选择。它是最简洁的,它只是表示您希望此代码在发生任何异常时发生。

关于delphi - 交易: except or on e:exception?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41206525/

相关文章:

delphi - 语言问题 : record field with an anonymous record(? ) 作为类型...?

delphi - 在DELPHI XE中升级到HTMLHelpViewer(找不到HTMLHelpViewer.pas)

delphi - TDelphiTwain 组件,损坏 delphi 表单(dfm 文件)

delphi - 带变量的 SQL 查询

delphi - 如何在流中搜索十六进制?

android - 在Delphi XE7 Android中的Messagedlg

delphi - 如何使用 Win32 调试 API 实现代码覆盖率工具

c# - 从 Delphi 调用 C# dll

delphi - 从泛型参数继承在 Delphi XE 中不起作用

Delphi - 获取应用程序打开了哪些文件