两者之间究竟有什么区别(以及使用什么):
try
UniTransaction1.Commit;
except
UniTransaction1.Rollback;
end;
Run Code Online (Sandbox Code Playgroud)
并且:
try
UniTransaction1.Commit;
except
on E:exception do
UniTransaction1.Rollback;
end;
Run Code Online (Sandbox Code Playgroud)
是不是'除了'一个例外?
Dav*_*nan 11
前者将捕获作为异常引发的所有对象,后者仅捕获从类派生的对象Exception.
它并不是众所周知,但Delphi确实提出了引发非衍生的异常Exception.也就是说,你可以完全自由地使用不是派生的对象引发异常Exception.在实践中,我从未遇到过这样的事情.你根本看不到代码会引发任何不能衍生出来的东西Exception.对于所有意图和目的,这意味着两个变体的行为相同.
由于您没有引用异常对象,因此您似乎没有必要声明一个从未使用过的变量.这带来了另一种选择:
on Exception do
....
Run Code Online (Sandbox Code Playgroud)
这将捕获与第二个变体相同的所有异常,但不会声明可引用异常对象的变量.
你应该使用哪一个?您可以使用它们中的任何一个并具有相同的行为,当然假设您没有遇到不是从中派生的异常Exception.如果是我,我会选择你的第一个选择.它是最简洁的,它只是说你希望这个代码在任何异常的情况下发生.
| 归档时间: |
|
| 查看次数: |
777 次 |
| 最近记录: |