gpt4 book ai didi

exception-handling - 有标准异常(exception)吗?

转载 作者:行者123 更新时间:2023-12-04 07:57:55 27 4
gpt4 key购买 nike

我一直在使用throw new Exception("...")在我的代码中,因为我找不到其他可以使用的东西。我正在寻找像 C++'s 这样的东西 out_of_range logic_error 类。

std.exception 定义了一些函数来帮助处理异常,但没有实际的类型。

我们是要定义我们自己的所有异常,还是 Exception只是用于一切?

最佳答案

在 Phobos 中的大多数情况下,每个模块都有自己的异常类型,以模块命名 - 例如UTFException对于 std.utf 和 FileException对于标准文件。有一些没有(例如 std.concurrency 有几种异常类型 - MessageMismatchOwnerTerminated 等),但这是总体趋势。因此,没有以程序员自己实例化它们的想法创建异常类型。没有什么可以阻止您使用任何现有的异常类型,但在大多数情况下,重用它们没有意义,因为它们是特定于模块而不是特定于用例的。

现在,最接近 C++ 的 out_of_range 的类比和 logic_error类型将是 Error s 而不是 Exception s - 特别是 core.exception.RangeErrorcore.exception.AssertError . Error s 是不同的,并且不打算从中恢复。 core.exception 定义了其中的几个(包括 OutOfMemoryError )。你通常不会自己使用这些,但如果你愿意,你可以。 AssertErrorassert 抛出的内容当它失败时。

所以,要清楚,Throwable是基本异常类型。 ErrorException来自 Throwable .任何不是从 Exception 派生的异常类型跳过析构函数、范围语句和 finally block ,并且不打算从中恢复。几个标准Error s 存在 - 主要在 core.exception 中找到,但如果需要,您可以定义自己的。您可能不会使用或定义 Error s 经常 - 除了使用 assert .

另一方面,任何源自 Exception旨在可恢复并将触发析构函数、范围语句和 finally block 。一般没有标准Exception -派生类型,您将在自己的代码中实例化。你 catch Exception s 是 Phobos 定义的,但你通常不会扔掉它们。相反,您可以实例化 Exception直接或您使用自己的Exception -派生类型。

使用 enforce 也经常被认为是好的做法。和 enforceEx 而不是直接抛出异常(尽管显然在某些情况下直接抛出异常更有意义)。

关于exception-handling - 有标准异常(exception)吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8144522/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com