Внутренние исключения

Внутренние исключения

Вы можете догадываться, что вполне возможно генерировать исключения и во время обработки другого исключения. Например, предположим, что вы обрабатываете CarIsDeadException в рамках конкретного блока catch и в процессе обработки пытаетесь записать след стека в файл carErrors.txt на вашем диске C.

catch(CarlsDeadException e) {

 // Попытка открыть файл carErrors.txt на диске C.

 FileStream fs = File.Open(@"C:carErrors.txt", FileMode.Open);

 …

}

Если указанный файл на диске C не найден, попытка вызова File.Open() даст в результате FileNotFoundException. Позже мы рассмотрим пространство имен System.IO и выясним, как перед открытием файла можно программными средствами проверить наличие файла на жестком диске (и предотвратить возможность возникновения исключения). Однако здесь, чтобы сосредоточиться на теме исключений, мы предполагаем, что исключение возникло.

Когда во время обработки одного исключения обнаруживается другое исключение, лучше всего записать новый объект исключения, как "внутреннее исключение" в рамках нового объекта того же типа, что и исходное исключение (язык сломаешь!). Причина, по которой мы должны создавать новый объект исключения, заключается в том, что единственным способом документирования внутреннего исключения оказывается использование параметров конструктора. Рассмотрите следующий фрагмент программного кода.

catch (CarIsDeadException e) {

 try {

  FileStream fs = File.Open(@"C:carErrors.txt", FileMode.Open);

  …

 } catch(Exception e2) {

  // Генерирование исключения, записывающего новое исключение

  // и сообщение первого исключения.

  throw new CarIsDeadException(e.Message, e2);

 }

}

Заметьте, что в данном случав мы передали объект FileNotFoundException конструктору CarIsDeadException в виде второго параметра. Сконфигурировав этот новый объект, мы направляем его по стеку вызовов следующему вызывающему объекту, в данном случае по отношению к методу Main().

С учетом того, что после Main() "следующих вызывающих объектов" для обработки исключений нет, мы снова должны увидеть диалоговое окно с сообщением об ошибке. Во многом подобно генерированию вторичных исключений, запись внутренних исключений обычно оказывается полезной только тогда, когда вызывающий объект имеет возможность красиво обработать такое исключение. В этом случае логика catch вызывающей стороны может использовать свойство InnerException для получения подробной информации об объекте внутреннего исключения.

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг

Альберти и внутренние враги

Из книги Журнал «Компьютерра» № 7 от 20 февраля 2007 года автора Журнал «Компьютерра»

Альберти и внутренние враги Автор: Киви БердRSA Conference, крупнейший и самый знаменитый в мире форум по информационной безопасности, из года в год набирает популярность. Ни утрата независимости фирмой-организатором RSA Security (в прошлом году ее купила корпорация-гигант EMC,


Внутренние рекламные сети

Из книги Разгони свой сайт автора Мациевский Николай

Внутренние рекламные сети На некоторых веб-страницах, использующих внутренние системы показа рекламы, вставка объявлений выполняется через iframe (в общем случае — наиболее быстрый способ), иногда через document.write (иногда даже каскадный, когда с помощью одного document.write


Внутренние ТВ-тюнеры

Из книги Компьютер + TV: телевидение на ПК автора Гольцман Виктор Иосифович

Внутренние ТВ-тюнеры Практически все современные внутренние телевизионные тюнеры выпускаются в виде PCI-карт, которые устанавливаются в соответствующий слот материнской платы. Эти тюнеры характеризуются богатством разнообразных сервисных функций, серьезно опережая по


Внутренние DVB-тюнеры

Из книги Собираем компьютер своими руками автора Ватаманюк Александр Иванович

Внутренние DVB-тюнеры Внутренние DVB-тюнеры – это тюнеры, выполненные на плате, подключающейся к компьютеру по шине PCI. Такие тюнеры не имеют своего корпуса, так как находятся внутри корпуса компьютера. Если сравнивать количество моделей внутренних и внешних тюнеров, то


2.1. Внутренние устройства

Из книги Искусство программирования для Unix автора Реймонд Эрик Стивен

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


3.1.4. Внутренние границы

Из книги Искусство программирования для Unix автора Реймонд Эрик Стивен

3.1.4. Внутренние границы В Unix действует предположение о том, что программист знает лучше (чем система). Система не остановит пользователя и не потребует какого-либо подтверждения при выполнении опасных действий с данными, таких как ввод команды rm -rf *. С другой стороны, Unix


3.1.4. Внутренние границы

Из книги Основы объектно-ориентированного программирования автора Мейер Бертран

3.1.4. Внутренние границы В Unix действует предположение о том, что программист знает лучше (чем система). Система не остановит пользователя и не потребует какого-либо подтверждения при выполнении опасных действий с данными, таких как ввод команды rm -rf *. С другой стороны, Unix


Внешние и внутренние факторы

Из книги Программирование на языке Ruby [Идеология языка, теория и практика применения] автора Фултон Хэл

Внешние и внутренние факторы Все мы хотим, чтобы наше ПО было быстродействующим, надежным, легким в использовании, читаемым, модульным, структурным и т.д. Но эти определения описывают два разных типа качества. Наличие или отсутствие таких качеств, как скорость и простота


3.11. Внутренние модификаторы

Из книги Firebird РУКОВОДСТВО РАЗРАБОТЧИКА БАЗ ДАННЫХ автора Борри Хелен

3.11. Внутренние модификаторы Обычно модификаторы (например, i или m) задаются после регулярного выражения. Но что если мы хотим применить модификатор только к части выражения?Существует специальная нотация для включения и выключения модификаторов. Заключенный в круглые


3.12. Внутренние подвыражения

Из книги Видео на вашем компьютере: ТВ тюнеры, захват кадра, видеомонтаж, DVD автора Буковецкая Оксана Александровна

3.12. Внутренние подвыражения Для указания подвыражений применяется нотация ?>:re = /(?>abc)(?>def)/   # То же, что /abcdef/re.match("abcdef").to_a # ["abcdef"]Отметим, что наличие подвыражения еще не означает группировки. С помощью дополнительных скобок их, конечно, можно превратить в запоминаемые


Внутренние функции SQL

Из книги Искусство программирования на языке сценариев командной оболочки автора Купер Мендель


Внутренние устройства

Из книги Раскрутка: секреты эффективного продвижения сайтов автора Евдокимов Николай Семенович

Внутренние устройства Наибольшее число моделей устройств видеоввода реализовано в виде плат. Наверняка даже самым «неискушенным» читателям встречались названия такого рода: «плата в стандарте PCI» (Peripheral Component Interconnect – соединение периферийных компонентов). Сейчас самое


Глава 11. Внутренние команды

Из книги HTML, XHTML и CSS на 100% автора Квинт Игорь

Глава 11. Внутренние команды Внутренняя команда -- это команда, которая встроена непосредственно в Bash. Команды делаются встроенными либо из соображений производительности -- встроенные команды исполняются быстрее, чем внешние, которые, как правило, запускаются в дочернем


Внутренние факторы

Из книги Продвижение порталов и интернет-магазинов автора Гроховский Леонид О.

Внутренние факторы В 1994 году увидела свет первая полнотекстовая поисковая система под названием WebCrawler. Произошла революция: ранее информация в Сети структурировалась исключительно в виде каталогов ссылок, сгруппированных по тематическому признаку. Следом на орбиту


Внутренние ссылки

Из книги автора

Внутренние ссылки Внутренние ссылки организуют переходы внутри одного HTML-документа. Они применяются, когда на одной странице много текста. Для простоты навигации можно создать ссылки, при щелчке кнопкой мыши на которых пользователь автоматически перейдет к нужной


Внутренние ссылки

Из книги автора

Внутренние ссылки Изучение списка исходящих ссылок на внешние сайты. Статический вес распределяется между всеми ссылками сайта. Если ссылок на другие ресурсы существенное количество, продвигаемые страницы сайта могут недополучать вес. Необходимо:? просмотреть список