Exception handling 是否有任何标准的例外情况?
我一直在我的代码中使用Exception handling 是否有任何标准的例外情况?,exception-handling,d,standard-library,Exception Handling,D,Standard Library,我一直在我的代码中使用抛出新异常(“…”),因为我找不到其他可用的东西。我在找一些东西,比如课程 定义了一些函数来帮助处理异常,但没有实际的类型 我们是要定义我们自己的所有异常,还是只将异常用于所有事情?。在特定模块中,也有针对坏错误等的特定错误 对于火卫一中的大多数模块,每个模块都有自己的以模块命名的异常类型-例如std.utf的utfeexception和std.file的FileException。有一些没有(例如,std.concurrency有几种异常类型-消息不匹配,所有者终止,等等
抛出新异常(“…”)
,因为我找不到其他可用的东西。我在找一些东西,比如课程
定义了一些函数来帮助处理异常,但没有实际的类型
我们是要定义我们自己的所有异常,还是只将异常用于所有事情?。在特定模块中,也有针对坏错误等的特定错误 对于火卫一中的大多数模块,每个模块都有自己的以模块命名的异常类型-例如std.utf的
utfeexception
和std.file的FileException
。有一些没有(例如,std.concurrency有几种异常类型-消息不匹配
,所有者终止
,等等),但这是总体趋势。因此,不存在创建异常类型的想法,即程序员将自己实例化它们。没有什么可以阻止您使用任何现有的异常类型,但是在大多数情况下,重用它们是没有意义的,因为它们是特定于模块的,而不是特定于用例的
现在,与C++的out\u of u range
和logic\u error
类型最接近的类比是error
s,而不是Exception
s——具体地说是core.Exception.RangeError
和core.Exception.AssertError
<代码>错误s是不同的,不打算从中恢复。core.exception定义了其中几个(包括OutOfMemoryError
)。你通常不会自己使用这些,但如果你愿意,你可以<代码>断言错误是当它失败时由断言
引发的错误
因此,需要明确的是,Throwable
是基本的异常类型<代码>错误和异常
是从可丢弃性
派生出来的。任何不是从exception
派生的异常类型都会跳过析构函数、作用域语句并最终阻塞,并且不打算从中恢复。存在多个标准的错误
s-主要在core.exception中找到,但如果需要,您可以定义自己的。不过,除了使用assert
之外,您可能不会经常使用或定义错误
另一方面,从Exception
派生的任何内容都是可恢复的,并将触发析构函数、范围语句和最终块。通常没有标准的异常
派生类型可以在您自己的代码中实例化。您捕获Phobos定义的异常
s,但通常不会抛出它们。相反,您要么直接实例化异常
,要么使用自己的异常
派生类型
使用和而不是直接抛出异常(尽管在某些情况下,直接抛出异常显然更有意义)也是经常被认为的良好实践。感谢您对错误与异常的出色解释,这可能是重复的。