#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.Исключение.
Чем более специализированным является ваше исключение, тем меньше вероятность, что вы его там найдете, но предполагалось, что все исключения должны иметь смысл как подклассы к существующим исключениям.