Есть ли у Phobos (и / или Tango) набор предопределенных типов исключений?

#exception #d #tango #phobos

#исключение #d #tango #phobos

Вопрос:

Документация D кажется немного запутанной, и я не могу найти эту информацию нигде на официальном сайте. Мне нужны некоторые распространенные типы исключений (например, NotFiniteNumberException, FileIOException, подобные типы), существуют ли они в основных библиотеках, или мне придется запускать их самостоятельно?

Ответ №1:

Некоторые из них существуют, некоторые — нет. Лучшая стратегия для их поиска — просто выполнить глобальный поиск текста : Exception в среде выполнения D (и Phobos) и посмотреть, каковы все ранее существовавшие исключения.

Однако, скорее всего, вам придется внедрить хотя бы некоторые из ваших собственных.

С помощью этого поиска я нашел следующее:

 druntimesrccoredemangle.d(72):static class ParseException : Exception
druntimesrccoredemangle.d(81):static class OverflowException : Exception
druntimesrccoreexception.d(297):     class UnicodeException : Exception
druntimesrccorethread.d(34):         class ThreadException : Exception
druntimesrccorethread.d(51):         class FiberException : Exception
druntimesrccoretime.d(2703):         class TimeException : Exception
druntimesrccoresyncexception.d(21): class SyncException : Exception
phobosstdboxer.d(511):                class UnboxException : Exception
phobosstdconcurrency.d(198):          class MessageMismatch : Exception
phobosstdconcurrency.d(210):          class OwnerTerminated : Exception
phobosstdconcurrency.d(225):          class LinkTerminated : Exception
phobosstdconcurrency.d(240):          class PriorityMessageException: Exception
phobosstdconcurrency.d(255):          class MailboxFull : Exception
phobosstdconv.d(33):                  class ConvException : Exception
phobosstddemangle.d(26):      private class MangleException : Exception
phobosstdencoding.d(2056):            class EncodingException : Exception
phobosstdexception.d(792):            class ErrnoException : Exception
phobosstdfile.d(183):                 class FileException : Exception
phobosstdjson.d(418):                 class JSONException : Exception
phobosstdregexp.d(161):               class RegExpException : Exception
phobosstdsocket.d(121):               class SocketException: Exception
phobosstdsocket.d(455):               class HostException: Exception
phobosstdsocket.d(670):               class AddressException: Exception
phobosstdstdio.d(2111):               class StdioException : Exception
phobosstdstream.d(44):                class StreamException: Exception
phobosstdutf.d(45):                   class UtfException : Exception
phobosstdvariant.d(1153):      static class VariantException : Exception
phobosstdxml.d(2726):                 class XMLException : Exception
phobosstdzip.d(44):                   class ZipException : Exception
phobosstdzlib.d(42):                  class ZlibException : Exception
phobosstdwindowsregistry.d(75):      class Win32Exception : Exception
  

(Конечно, если есть исключения, которые наследуются от классов, отличных от Exception , или если интервал был странным, то их нет в этом списке.)

Комментарии:

1. Общая настройка в druntime и Phobos заключается в создании исключения, специфичного для модуля, из которого оно генерируется (хотя в некоторых случаях существуют дополнительные типы исключений для определенных типов ошибок), и в целом, вам, вероятно, не следует создавать исключения этих типов самостоятельно. Обычно вы можете, если хотите, но это может сбить с толку любого, кто использует ваш код, когда он начинает выдавать исключения, специфичные для модулей стандартной библиотеки, а исключение вообще не было получено из стандартной библиотеки.

Ответ №2:

Иерархия исключений была достаточно продумана в Tango, и общий набор доступен в tango.core.Исключение.

Чем более специализированным является ваше исключение, тем меньше вероятность, что вы его там найдете, но предполагалось, что все исключения должны иметь смысл как подклассы к существующим исключениям.