Меню
Разработки
Разработки  /  Информатика  /  Презентации  /  Прочее  /  Обработка исключений

Обработка исключений

Презентация использовалась на занятиях профессионального модуля в ОПК СТИ НИТУ МИСиС

21.12.2017

Содержимое разработки

Тема 7. Управление обменом и обработка исключительных ситуаций   Лекция 7.3. Обработка исключений

Тема 7.

Управление обменом и обработка исключительных ситуаций

Лекция 7.3.

Обработка исключений

Литература Основная: Павловская Т.А., Щупако Ю.А. C / C ++. Структурное программирование, Питер, 2005. – 402 с.  Дополнительная: Гросс К. С# 2008: Пер. с. анг. – СПб. БХВ-Петербург, 2009. – 576 с. Троелсен Э. Язык программирования С# 2005 и платформа /NET 2.0:пер. с анг. – М:. ООО «И.Д. Вильямс, 2007. – 1168 с.

Литература

Основная:

Павловская Т.А., Щупако Ю.А. C / C ++. Структурное программирование, Питер, 2005. – 402 с.

Дополнительная:

Гросс К. С# 2008: Пер. с. анг. – СПб. БХВ-Петербург, 2009. – 576 с.

Троелсен Э. Язык программирования С# 2005 и платформа /NET 2.0:пер. с анг. – М:. ООО «И.Д. Вильямс, 2007. – 1168 с.

Вопросы : 1. Ошибки и исключения. 2. Стандартная обработка исключений. 3. Программные средства обработки исключений.

Вопросы :

1. Ошибки и исключения.

2. Стандартная обработка исключений.

3. Программные средства обработки исключений.

1. Ошибки и исключения

1. Ошибки и исключения

Ошибки в программе: синтаксические ошибки; семантические ошибки; некорректность чужого кода; ошибки пользователя; нарушения технологии обработки; некорректная работа оборудования. Для предотвращения или выявления ошибочных ситуаций в ходе выполнения программы применяются: средства разработчика; средства ОС. Например, Windows API содержит сотни кодов ошибок. Указанные средства не обеспечивают единства в представлении сообщений об ошибках. Обнаруживаются в ходе выполнения программы

Ошибки в программе:

  • синтаксические ошибки;
  • семантические ошибки;
  • некорректность чужого кода;
  • ошибки пользователя;
  • нарушения технологии обработки;
  • некорректная работа оборудования.

Для предотвращения или выявления ошибочных ситуаций в ходе выполнения программы применяются:

  • средства разработчика;
  • средства ОС. Например, Windows API содержит сотни кодов ошибок.

Указанные средства не обеспечивают единства в представлении сообщений об ошибках.

Обнаруживаются в ходе выполнения программы

Последствия проявления ошибок: невозможность решения задачи; утечка ресурсов; наличие «мусора» после выполнения программы; искажения хранимых данных, программ и т.д. Часть ошибок система обходит, например, для вещественных чисел: - при вычислении квадратного корня из отрицательной величины результатом является величина NaN ; - при делении на 0 выдается результат бесконечность ; при вычислении логарифма нуля выдается результат отрицательная бесконечность . При стандартных настройках проекта и работе с целыми числами слишком большое целочисленное значение урезается путем отбрасывания «лишних» старших цифр. Но при этом понять где произошла ошибка не удается.

Последствия проявления ошибок:

  • невозможность решения задачи;
  • утечка ресурсов;
  • наличие «мусора» после выполнения программы;
  • искажения хранимых данных, программ и т.д.

Часть ошибок система обходит, например, для вещественных чисел:

- при вычислении квадратного корня из отрицательной величины результатом является величина NaN ;

- при делении на 0 выдается результат бесконечность ;

  • при вычислении логарифма нуля выдается результат отрицательная бесконечность .

При стандартных настройках проекта и работе с целыми числами слишком большое целочисленное значение урезается путем отбрасывания «лишних» старших цифр.

Но при этом понять где произошла ошибка не удается.

Для включения контроля за целочисленным переполнением:  а) «опасное» выражение заключают в конструкцию checked с круглыми скобками, например int p = checked ((int) Math.Pow(a,b)); б ) группу «опасных» операторов заключают в фигурные с скобки checked { оператор1 ; …; оператор N; } Если среди указанных операторов есть обращения к методам, то внутри этих методов контроль за переполнением не производится. Конструкция unchecked  отключает контроль за целочисленным переполнением (отключение контроля ускоряет выполнение операций). Добиться контроля за переполнением в операциях с вещественными числами невозможно .

Для включения контроля за целочисленным переполнением:

а) «опасное» выражение заключают в конструкцию checked с круглыми скобками, например

int p = checked ((int) Math.Pow(a,b));

б ) группу «опасных» операторов заключают в фигурные с скобки

checked { оператор1 ; …; оператор N; }

Если среди указанных операторов есть обращения к методам, то внутри этих методов контроль за переполнением не производится.

Конструкция unchecked отключает контроль за целочисленным переполнением (отключение контроля ускоряет выполнение операций).

Добиться контроля за переполнением в операциях с вещественными числами невозможно .

Существенная часть ошибок времени выполнения (например, выход индекса за пределы массива ) преобразуются в исключения . Исключение  ( Exception ) – класс-потомок объекта System .  При возникновении ошибки в ходе выполнения программы генерируется объект - исключение, который и содержит информацию о конкретной ошибке. Способы обработки исключения: стандартный ; обработка в приложении .

Существенная часть ошибок времени выполнения (например, выход индекса за пределы массива ) преобразуются в исключения .

Исключение ( Exception ) – класс-потомок объекта System . При возникновении ошибки в ходе выполнения программы генерируется объект - исключение, который и содержит информацию о конкретной ошибке.

Способы обработки исключения:

стандартный ;

обработка в приложении .

2. Стандартная обработка исключений

2. Стандартная обработка исключений

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

Исключение прерывает нормальный ход программы и передает управление обработчику исключений .

При выполнении программы в среде VS вначале появляется сообщение системы, например

После выбора режима Не отправлять в окне приложения выдается сообщение системы с конкретизацией вида и места предполагаемой ошибки.

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

При выборе режима Отладка осуществляется:

- переход в окно для выбора отладчика,

- затем переход в окно отладчика с названием, содержащем вид исключения и напоминание, что это исключение не обработано.

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

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

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

Пользователю переходить в режим отладки не имеет смысла.

3. Программные средства обработки исключений

3. Программные средства обработки исключений

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

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

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

Класс Exception включает десятки свойств и методов, часть из которых является виртуальными, т.е. могут переопределяться.

Типы исключений ArgumentException – вызов метода с недействительным аргументом ArgumentOutOfRangeException – вызов метода с аргументом вне допустимого диапазона ArthmeticException – арифметическая ошибка FormatException – неправильный формат параметра (не число при вводе с консоли значения арифметической величины) IndexOutOfRangeException – индекс массива выходи за допустимые пределы OverFlowException – переполнение при арифметической операции над целыми числами FileNotFoundException  - файл не найден

Типы исключений

ArgumentException – вызов метода с недействительным аргументом

ArgumentOutOfRangeException – вызов метода с аргументом вне допустимого диапазона

ArthmeticException – арифметическая ошибка

FormatException – неправильный формат параметра (не число при вводе с консоли значения арифметической величины)

IndexOutOfRangeException – индекс массива выходи за допустимые пределы

OverFlowException – переполнение при арифметической операции над целыми числами

FileNotFoundException - файл не найден

e) { … } " width="640"

В языке С # применяются 4 ключевых слова ( try , catch , throw , finale ), с помощью которых генерируются и обрабатываются исключения.

Существуют несколько типовых конструкций обработки исключений.

Типовая конструкция 1:

try

{

}

catch ( тип исключения e)

{

}

e) { … } содержит код, выполняемый при возникновении исключения. Программист может предусмотреть содержательную обработку исключений или завершить выполнение программы. " width="640"

Ловушка исключений - блок try {… }

Фигурные скобки ограничивают строки кода, в которых ожидается появление исключений. Если обнаруживается исключение, то управление передается блоку catch .

Блок

catch ( тип исключения e)

{

}

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

. Допускается опускать этот параметр и тем самым формировать обобщенный блок catch , реагирующий на исключения всех типов. При наличии нескольких блоков catch , в том числе и без параметра, этот обобщенный блок должен располагаться последним. " width="640"

Код программы может содержать несколько блоков catch , каждый из которых реагирует на исключения определенного типа, например исключения типа System.IndexOutOfRangeException или System.IO.DirectoryNotFoundException путем использования параметра тип исключения .

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

Последовательность событий в программе: - выполнение блока try останавливается в точке, где возникло исключение; - отыскивается блок catch , соответствующий типу исключения. Если такого блока нет, но есть обобщенный блок catch , тогда он становится блоком обработки; начинает выполняться соответствующий блок обработки исключений; выполняется код программы, стоящий за всеми блоками catch . если блока обработки соответствующего типа исключения нет, тогда выполняется стандартная обработка.

Последовательность событий в программе:

- выполнение блока try останавливается в точке, где возникло исключение;

- отыскивается блок catch , соответствующий типу исключения. Если такого блока нет, но есть обобщенный блок catch , тогда он становится блоком обработки;

  • начинает выполняться соответствующий блок обработки исключений;
  • выполняется код программы, стоящий за всеми блоками catch .
  • если блока обработки соответствующего типа исключения нет, тогда выполняется стандартная обработка.
e) переменная e является именем объекта-исключения. При наличии нескольких блоков catch для различных исключений в случае надобности выполняется только один из них. Конструкция e.GetType().Name + " " + e1.Message позволяет сформировать строку из имени типа исключения (формальное определение типа, например, FormatException ) и поясняющего текста (например, Входная строка имела неверный формат ). " width="640"

Если программа в рамках блока try не генерирует исключение, то блоки catch полностью пропускаются. В любом случае программа может продолжать выполняться, начиная с оператора, стоящего за блоками catch (если при обработке в блоке не предусмотрено другое). В блоке catch ( тип исключения e) переменная e является именем объекта-исключения.

При наличии нескольких блоков catch для различных исключений в случае надобности выполняется только один из них.

Конструкция

e.GetType().Name + " " + e1.Message

позволяет сформировать строку из имени типа исключения (формальное определение типа, например, FormatException ) и поясняющего текста (например, Входная строка имела неверный формат ).

Фрагмент кода  int[] mas1 = {1,  2,  3}; try  {  mas1[4] = 0;  } catch (IndexOutOfRangeException e)   {   Console.WriteLine(

Фрагмент кода

int[] mas1 = {1, 2, 3};

try

{

mas1[4] = 0;

}

catch (IndexOutOfRangeException e)

{

Console.WriteLine("Исключение={0}",e.Message);

}

Приведет к отображению на экране текста

Исключение= Индекс находится вне границ массива

Здесь Message свойство объекта, содержащее наименование исключения.

Типовая конструкция 2: try {  … } finally {  … } В такой конструкции, если возникает исключение в блоке try , начинает выполняться код блока finally . После этого осуществляется стандартная обработка исключения. Если в блоке try исключения не возникают, то блок finally выполняется после блока try . В блок finally целесообразно включать операторы, которые должны быть выполнены независимо от возникновения исключений (например, сохранение данных).

Типовая конструкция 2:

try

{

}

finally

{

}

В такой конструкции, если возникает исключение в блоке try , начинает выполняться код блока finally . После этого осуществляется стандартная обработка исключения. Если в блоке try исключения не возникают, то блок finally выполняется после блока try .

В блок finally целесообразно включать операторы, которые должны быть выполнены независимо от возникновения исключений (например, сохранение данных).

e 1 ) { … } catch ( тип исключения2 e 2 ) { … } . . . finally { … } Блок finally выполняется всегда – либо после блока try , если нет исключений, либо после блока catch . " width="640"

Типовая конструкция 3:

try

{

}

catch ( тип исключения1 e 1 )

{

}

catch ( тип исключения2 e 2 )

{

}

. . .

finally

{

}

Блок finally выполняется всегда – либо после блока try , если нет исключений, либо после блока catch .

) ; Например выполнение оператора throw (new System.Exception()); приведет к генерации исключения. " width="640"

В языке есть оператор искусственной генерации исключения:

throw (new тип исключения ) ;

Например выполнение оператора

throw (new System.Exception());

приведет к генерации исключения.

В системе содержится множество исключений, любое из которых программист может генерировать и обрабатывать в программе. В VS предусмотрено специальное окно для просмотра и редактирования обработки исключений. Окно вызывается выполнением команды Отладка  –  Исключения…- Common Language Runtime Exceptions . Исключения можно конфигурировать с помощью флажков. Первый флажок Генерируется позволяет перейти в режим отладки даже в случае возникновения обрабатываемых исключений. Второй – чтобы игнорировались исключения, необработанные программно (но  обычно все равно осуществляется переход в режим Break ).

В системе содержится множество исключений, любое из которых программист может генерировать и обрабатывать в программе.

В VS предусмотрено специальное окно для просмотра и редактирования обработки исключений. Окно вызывается выполнением команды

Отладка Исключения…- Common Language Runtime Exceptions .

Исключения можно конфигурировать с помощью флажков. Первый флажок Генерируется позволяет перейти в режим отладки даже в случае возникновения обрабатываемых исключений. Второй – чтобы игнорировались исключения, необработанные программно (но обычно все равно осуществляется переход в режим Break ).

Вопросы для самоподготовки Понятие и виды исключений. Способы обработки исключений. Сущность стандартной обработки исключений. Типовые программные конструкции обработки исключений. Назначение программных блоков try , catch , finale . Изучить постановку задачи на практическое занятие.

Вопросы для самоподготовки

  • Понятие и виды исключений.
  • Способы обработки исключений.
  • Сущность стандартной обработки исключений.
  • Типовые программные конструкции обработки исключений.
  • Назначение программных блоков try , catch , finale .
  • Изучить постановку задачи на практическое занятие.

При отладке программ с массивами удобно использовать средства автоматического заполнения этих массивов случайными числами. Для этого используют класс Random из пространства имен System . Конструкторы Random r = new Random();  при каждом выполнении программы генерируется уникальная последовательность чисел; Random r = new Random( 1 ); параметр задает начальное значение генератора, что обеспечивает получение одинаковых последовательностей чисел Основные методы класса Next (min, max) – возвращает целое положительное «случайное»  число в диапазоне [min, max] ; NextDouble() - возвращает вещественное положительное «случайное» число в диапазоне [0,1).

При отладке программ с массивами удобно использовать средства автоматического заполнения этих массивов случайными числами. Для этого используют класс Random из пространства имен System .

Конструкторы

Random r = new Random();

при каждом выполнении программы генерируется уникальная последовательность чисел;

Random r = new Random( 1 );

параметр задает начальное значение генератора, что обеспечивает получение одинаковых последовательностей чисел

Основные методы класса

Next (min, max) – возвращает целое положительное «случайное» число в диапазоне [min, max] ;

NextDouble() - возвращает вещественное положительное «случайное» число в диапазоне [0,1).

Пример использования класса Random r = new Random(); Random r1 = new Random(1); for (int i=0; i  { mas1[i]=r.Next(10,100); } for (int i=0; i  { mas2[i]=r1.NextDouble(); }

Пример использования класса

Random r = new Random();

Random r1 = new Random(1);

for (int i=0; i

{ mas1[i]=r.Next(10,100); }

for (int i=0; i

{ mas2[i]=r1.NextDouble(); }

-80%
Курсы дополнительного образования

Основы HTML

Продолжительность 72 часа
Документ: Cвидетельство о прохождении курса
4000 руб.
800 руб.
Подробнее
Скачать разработку
Сохранить у себя:
Обработка исключений (541 KB)

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

Чтобы добавить комментарий зарегистрируйтесь или на сайт

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