/
n-dimens
/
pascalabcnet
Обзор
Документация
Войти
/
n-dimens
/
pascalabcnet
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
PABCNetHelp/LangGuide/ExceptionHandling/ExeptionsExamples.html
94 строки
5 KB
samuraiGH
adding working-tree-encoding attribute (#3325)
07 ноя 2025, 16:12
Не верифицирован
07 ноя 2025, 16:12
cf1fd29
Код
Авторство
О чём код?
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=windows-1251"> <title></title> <link rel="StyleSheet" href="../../default.css"> </head> <body> <H1>Примеры обработки исключений</H1> <p><b>Пример 1.</b> Обработка неверного ввода данных.</p> <p>Рассмотрим программу. </p> <blockquote> <p><code><b>var</b> i: integer;<br> <b>begin</b><br> readln(i);<br> writeln(i);<br> writeln('Выполнение программы продолжается');<br> <b>end</b>.</code></p> </blockquote> <p>Если при вводе данных произойдет ошибка (например, мы введем не число), то программа завершится с ошибкой (ошибка ввода), и последующие операторы <code>writeln</code> не будут выполнены.</p> <p>Перехватим исключение в блоке <code><b>try</b></code>:</p> <blockquote> <p><code><b>var</b> i: integer;<br> <b>begin</b><br> <b>try</b><br> readln(i);<br> writeln(i);<br> <b>except</b><br> writeln('Ошибка ввода');<br> <b>end</b>;<br> writeln('Выполнение программы продолжается');<br> <b>end</b>.</code></p> </blockquote> <p>На этот раз при возникновении ошибки ввода программа не будет завершена, а выполнение будет передано в блок <code><b>except</b></code>, после чего выполнение программы продолжится дальше. Таким образом, в последней программе не выполнится лишь оператор <code>writeln(i)</code>.</p> <p>Если в блоке <code><b>try</b></code> могут возникнуть различные исключения, то обычно используется вторая форма блока <code> <b>except</b></code> с несколькими обработчиками исключений. </p> <p><b>Пример 2.</b> Обработка различных исключений.</p> <blockquote> <p><code><b>var</b> a,b: integer;<br> assign(f,'a.txt');<br> <b>try<br> </b> readln(a,b);<br> reset(f);<br> c:=a <b>div</b> b;<br> <b>except</b><br> <b>on</b> System.DivideByZeroException <b>do</b><br> writeln('Целочисленное деление на 0'); <br> <b>on</b> System.IO.IOException <b>do</b><br> writeln('Файл отсутствует'); <br> <b>end</b>;</code></p> </blockquote> <p>Часто необходимо совмещать обработку исключений и освобождение ресурсов независимо от того, произошло исключение или нет. В этом случае используются вложенные операторы <code><b>try</b></code> ... <code> <b>except</b></code> и <code><b>try</b></code> ... <code> <b>finally</b></code>. </p> <p><b>Пример 3.</b> Вложенные операторы <code><b>try</b></code> ... <code><b>except</b></code> и <code><b>try</b></code> ... <code><b>finally</b></code>. </p> <blockquote> <p><code>assign(f,'a.txt');<br> <b>try</b><br> reset(f);<br> <b> try<br> try</b><br> c:=a <b>div</b> b;<br> <b> except</b><br> <b> on</b> System.DivideByZeroException <b>do</b><br> writeln('Целочисленное деление на 0'); <br><b> end</b>;<br> <b> finally</b><br> close(f);<br> <b> end</b>;<br> <b>except</b><br> <b>on</b> System.IO.IOException <b>do</b><br> writeln('Файл отсутствует'); <br> <b>end</b>;</code></p> </blockquote> <p>Обратим внимание, что в данном примере исключение, связанное c целочисленным делением на 0, обрабатывается в самом внутреннем блоке <code><b>try</b></code>, а исключение, связанное с отсутствующим файлом - в самом внешнем. При этом, если файл был открыт, то независимо от возникновения исключения деления на 0 он будет закрыт.</p> </body> </html>