两者之间到底有什么区别(以及使用什么):
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/