您如何命名和组织例外?

Hei*_*cht 7 delphi coding-style exception

在引入新的异常类型时,我总是不确定如何正确地执行此操作.有共同的约定吗?你怎么做呢?

我对你组织它们的范围感兴趣(将它们保存在它们所使用的单元中?在组件级别上有一个单元吗?包级别?应用程序?)

这也会影响命名.你包括多少背景?是否更好地使它们非常具体(如EPersonIDNotFoundError)或尝试使它们可重用(如ENotFoundError)?

后缀"错误"怎么样 - 什么时候应该添加它并何时离开呢?我无法看到例如以下的逻辑Classes.pas:

  EWriteError = class(EFilerError);
  EClassNotFound = class(EFilerError);
  EResNotFound = class(Exception);
Run Code Online (Sandbox Code Playgroud)

Gol*_*rol 6

我所知道的唯一真正的约定是用它们作为前缀E.我还没有真正给它多想过去,但现在我想起来了,在我看来,这两个ErrorException常用的后缀.如果你把它们混合在一起,我会说这Exception与意外出错的事情有关,例如连接被破坏,或者文件结果是不可读的,而错误则与错误的输入有关,例如预期的数字,但有人输入了文字.

VCL似乎也遵循某些约定,但它似乎只有在没有它的情况下才会添加后缀,例如没有它,例如

EConvertError,EMathError,EVariantError

VS

EAccessViolation,EInvalidPointer,EZeroDivide

后者描述错误本身,其中第一个列表需要后缀来指示某个进程或实体中的错误.

这些示例可以在SysUtils中找到,也许您可​​以查看一下,因为它包含许多异常类以及更大量异常的基类.Exception除了一些确实你希望永远不会遇到的非常具体的错误,例如EHeapException和ESafecallException之外,很少有这些错误.