Exception 火卫一(和/或Tango)是否有一组预定义的异常类型?

Exception 火卫一(和/或Tango)是否有一组预定义的异常类型?,exception,d,tango,phobos,Exception,D,Tango,Phobos,D文档似乎有点凌乱,我在官方网站的任何地方都找不到这些信息。我需要一些常见的异常类型(例如NotFiniteNumberException、FileIOException、诸如此类的类型),它们是否存在于核心库中,或者我是否需要自己滚动这些类型?其中一些存在,一些不存在。找到它们的最佳策略是在D运行时(和Phobos)中全局搜索文本:Exception,并查看所有先前存在的异常是什么 不过,最有可能的是,你必须至少推出一些自己的产品 通过这次搜索,我发现了以下内容: druntime\src\c

D文档似乎有点凌乱,我在官方网站的任何地方都找不到这些信息。我需要一些常见的异常类型(例如NotFiniteNumberException、FileIOException、诸如此类的类型),它们是否存在于核心库中,或者我是否需要自己滚动这些类型?

其中一些存在,一些不存在。找到它们的最佳策略是在D运行时(和Phobos)中全局搜索文本
:Exception
,并查看所有先前存在的异常是什么

不过,最有可能的是,你必须至少推出一些自己的产品

通过这次搜索,我发现了以下内容:

druntime\src\core\demangle.d(72):static class ParseException : Exception
druntime\src\core\demangle.d(81):static class OverflowException : Exception
druntime\src\core\exception.d(297):     class UnicodeException : Exception
druntime\src\core\thread.d(34):         class ThreadException : Exception
druntime\src\core\thread.d(51):         class FiberException : Exception
druntime\src\core\time.d(2703):         class TimeException : Exception
druntime\src\core\sync\exception.d(21): class SyncException : Exception
phobos\std\boxer.d(511):                class UnboxException : Exception
phobos\std\concurrency.d(198):          class MessageMismatch : Exception
phobos\std\concurrency.d(210):          class OwnerTerminated : Exception
phobos\std\concurrency.d(225):          class LinkTerminated : Exception
phobos\std\concurrency.d(240):          class PriorityMessageException: Exception
phobos\std\concurrency.d(255):          class MailboxFull : Exception
phobos\std\conv.d(33):                  class ConvException : Exception
phobos\std\demangle.d(26):      private class MangleException : Exception
phobos\std\encoding.d(2056):            class EncodingException : Exception
phobos\std\exception.d(792):            class ErrnoException : Exception
phobos\std\file.d(183):                 class FileException : Exception
phobos\std\json.d(418):                 class JSONException : Exception
phobos\std\regexp.d(161):               class RegExpException : Exception
phobos\std\socket.d(121):               class SocketException: Exception
phobos\std\socket.d(455):               class HostException: Exception
phobos\std\socket.d(670):               class AddressException: Exception
phobos\std\stdio.d(2111):               class StdioException : Exception
phobos\std\stream.d(44):                class StreamException: Exception
phobos\std\utf.d(45):                   class UtfException : Exception
phobos\std\variant.d(1153):      static class VariantException : Exception
phobos\std\xml.d(2726):                 class XMLException : Exception
phobos\std\zip.d(44):                   class ZipException : Exception
phobos\std\zlib.d(42):                  class ZlibException : Exception
phobos\std\windows\registry.d(75):      class Win32Exception : Exception

(当然,如果存在继承自类而非
Exception
的异常,或者如果存在奇怪的间距,则它们不在该列表中。)

在Tango中对异常层次结构进行了相当多的考虑,并且可以从Tango.core.Exception获得一个通用集


异常越专业,在那里找到它的可能性就越小,但其目的是所有异常都应该作为现有异常的子类来理解。

druntime和Phobos中的一般设置是创建特定于抛出异常的模块的异常(尽管在某些情况下,对于特定类型的错误还有其他异常类型),一般来说,您可能不应该自己抛出这些类型的异常。如果您愿意,您通常可以这样做,但是当代码开始抛出特定于标准库模块的异常时,使用您的代码的任何人都可能会感到困惑,而异常根本不是来自标准库。