Max*_*xpm 6 exception-handling d standard-library
我一直在使用throw new Exception("...")我的代码,因为我找不到任何其他可用的东西.我正在寻找像C++ out_of_range和logic_error类这样的东西.
std.exception定义了一些函数来帮助处理异常,但没有实际的类型.
我们是要定义所有自己的异常,还是Exception只用于一切?
在Phobos的大多数情况下,每个模块都有自己的以模块命名的异常类型 - 例如UTFExceptionstd.utf和FileExceptionstd.file.有几个哪些没有(如std.concurrency有几个异常类型- MessageMismatch,OwnerTerminated等等),但是这是总的趋势.因此,没有创建异常类型的想法,程序员将自己实例化它们.没有什么可以阻止您使用任何现有的异常类型,但在大多数情况下,重用它们没有意义,因为它们是特定于模块而不是特定于用例.
现在,最接近的类比C++的out_of_range和logic_error类型将是Error做得相当不是Exception秒-特别是core.exception.RangeError和core.exception.AssertError.Errors是不同的,不打算从中恢复.core.exception定义了其中的几个(包括OutOfMemoryError).你通常不会自己使用它们,但如果你愿意,你可以.AssertError是assert它失败时抛出的东西.
所以,要清楚,Throwable是基本异常类型.Error并Exception衍生自Throwable.未衍生自任何异常类型Exception跳过析构函数,范围陈述,最后块和被不打算从被回收.Error存在几个标准- 主要在core.exception中找到,但如果需要,可以定义自己的标准.Error除了使用之外,您可能不会经常使用或定义s assert.
在另一方面,源自什么Exception 是对可回收且将触发析构函数,范围语句,finally块.有不一般的标准Exception派生类型,你会在自己的代码实例.你抓住了ExceptionPhobos定义的那些,但你通常不会抛弃它们.相反,您可以Exception直接实例化,也可以使用自己的Exception衍生类型.
它也经常被认为是一种良好的做法enforce,enforceEx而不是直接抛出异常(尽管显然有一种情况是直接扔掉一个更合理).
| 归档时间: |
|
| 查看次数: |
273 次 |
| 最近记录: |