Обработка на грешки в паскал - моята програма

Рейтинг: 0/5

Ако четете данните входно-изходни в PascalABC.NET. тогава може да имам един въпрос: "И как да се предпазите от неправилно въвеждане на потребителя, след като потребителят въведе невалидни данни ще бъдат грешка по време на изпълнение?". Да, има грешка, наречена изключение. Изключения - грешка, която не може да се избегне при изпълнението на програмата, както и единственото нещо, което може да направи програма е изключен. Що се отнася до моето мнение, и с право. Да си представим, че ние разработваме някои приложения, които се нуждаят от някой файл, който придружава програмата. Обърнете по-специално, ние разработихме в играта, което отнема няколко файлове, които се съхраняват материали, свързани с играта. Тази игра взехме и даде на своя приятел да играе, а той го взе и се качи в файловете, те започват да се коригира, и като цяло могат да се качват и да ги премахнат. През целия курс, програмата ви в такъв случай е просто да даде грешка и в никакъв случай не се стартира. Това е този вид грешки се наричат ​​изключения.

В Pascal има два вида грешки: изключения и грешки при диагностиката. Изключения - грешка програма, в случай, че програмата не ще бъде в състояние да изпълнява допълнително програмен код и програмата ще бъдат принудени да спрат работата си. Диагностични грешки - грешки, които се случват по време на изпитването (само по време на разработчика на програмата тестване в окончателния вариант на тези грешки не са налични.) Програма soobschyayuschie разработчик, че в хода на програмата за работа, възникнала повреда, поради което по-нататък (!) програмата може да е неправилна, а програмистът (ако програмистът иска, той може да продължи изпълнението на програмата по този начин, диагностични грешки (!) -. това е просто предупреждение за неправилно работа и го OST novit програма не може), компютърът ще продължи програмата.

Ние започваме да се научат грешката с диагностични грешки. Тази грешка се дължи на използване на команди

където Предикатна - е за първоначално се изпитват

TEXT_ERROR - това е текстът показва в прозореца с грешката, ако Предикатна е невярна (областта не е задължително).

Обадете се на тези грешки, подобни на условния оператор, точно обратното. В действителност, се твърди, проверява korektno данни и за грешка, ако те не са верни. Естествено, като предикат може да прехвърли логическите константи и сложни логически изрази.

По принцип тези диагностични грешки са много полезни в развитието на каквито и да било комплексни програми, тъй като благодарение на тях, можете да проверява автоматично програмата за грешки (само ако знаем на каква стойност се получава, или този резултат. Например «поддържали (нечетни ( 5) = вярно); »,« ASSERT (нечетен (4) = фалшива); »,« ASSERT ((5 + 5) = 10); »,« ASSERT (MyData = 0) ").. Това, между другото, един от начините за написването на програма "тестване". Това е, когато за първи път се пишат тестове за нашата програма, а след написването на самата програма, така че всички тестове са завършени, без грешки.

Да, не могат да бъдат обработени и дори диагностични грешки. И това е разбираемо защо (защото там е персонализирана версия на отстояват-S, обработките и как те не го правят).

За по-голяма яснота, отново, разгледаме пример с оценките от предходния урок. Само тогава ние ще обработим данните, въведени през отстояват.

Нека да анализираме кода. Обявена променлива положително цяло "о", което в третия ред се четат от клавиатурата. Допълнителна Отстояване на проверките на тази променлива на условията: стойността на "а" е по-голямо или равно на 2, а стойността му е по-малка или равна на 5. Ако това условие не е изпълнено, диагностично съобщение с текст "невалидно". Е, тогава вече можете да се разбере какво се случва. Вероятно сте забелязали, че "случай" не клон оператор "по-различно." И това не е необходимо, тъй като всички останали случаи сме тествали отстояват-ти.

Сега е ред на изключенията. Изключения са причинени от много проста:

който се повиши - е прекратяване на програмата и изключването на повикване

нов - с тази дума, ние ще въведем по-късно. Дотук си спомня.

Exeption_Name - е името на изключение. Паскал има много голяма йерархия от изключения.

ApplicationException - Всички потребителски изключения

SystemException - системни изключения

AccessViolationException - неоторизиран достъп до паметта

ArgumentException - неверни аргументи

ArgumentNullException - аргументът не съществува

ArgumentOutOfRangeException - аргументът е извън обхвата

ArithmeticException - аритметични изключения

DivideByZeroException - цяло число от 0 разделение

IndexOutOfRangeException - индекс от масив

InvalidCastException - изрично отливка на грешен тип

FormatException - I / грешка vvyvoda

OutOfMemoryException - Няма памет OS

StackOverflowException - perpolnen стека

IOException - System.IO пространство от имена

FileNotFoundException - Файлът не е намерен

EndOfStreamException - неочакван край на файл

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

За по-голямата част от случаите това е възможно, тъй като името изключение или запис Изключение System.Exception (същото).

TEXT_ERROR - текст, издаден на екрана (има не всички изключения).

Внимание! Трябва да се помни, че, за разлика от тях поддържали никакви изключения за коректност не проверяват. Веднага след като програмата достигне линията, която започва с «рейз», програмата ще бъде спряна и ще бъде издаден на грешка. Ето защо, изключение е по-добре да причини един от клоновете на условен израз (условни проверки на коректността на всеки един в случай на неправилно (един от клоновете), ще бъде изхвърлен. За по-голяма яснота, помислете примера на оценките, решаването на които с потребителско име по-горе, но с изключения.

Помислете за този код. "O" отново обявена за неподписан целочислена променлива. Той гласи стойността си от клавиатурата. И тогава там е проверка на коректността на въведените данни и ако входните данни не е правилна (тоест, ако тяхната задача променлива "о" по-малко от две или повече от 5 (по принцип е възможно да се опрости сказуемото на «ако (о> 5) или (О<2 ) then »)) то вызывается исключение. Которое останавливает ход выполнения программы и на экран выводится сообщение вида «Program1.pas(6). Ошибка времени выполнения: некорректный ввод». А, если данные корректны, то программа продолжает свою работу (поскольку в данном примере ветки «иначе» нету, то программа просто продолжит выполнять свою работу). Ну а, что твариться далее, Вам должно быть понятно.

В Pascal има два обработка на грешки структура. това

където Дейност 1; - е определен (в този случай, не се предприемат действия, както и набор от действия) действия, които се опитваме да изпълнява (!)

Действие2 - набор от действия, които да се извършва, когато грешка / изключение възникнали при изпълнение на Дейност 1

Action3 - набор от действия, които да бъдат изпълнени във всеки случай, независимо от това дали: Възникнала е грешка в Действие1 или не е, и кода са били обработени без грешки.

Внимание! Тези две структури са само по изключение! те не работят на диагностични грешки.

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

В този код, целия код от предишния пример, аз напълно въведена в устройството (всичко, което е между опит и с изключение). По този начин, се уверих, че всички грешки, които могат да възникнат, когато кодът ще бъде обработена и ще настъпи изключение. Ако има някаква грешка (за това могат да възникнат по време на въвеждане на данни (ако потребителят въведе данните на друг тип (като думата "здравей" или "-3.14", "C". Опции неправилно въвеждане на много)), ако влезе неправилна преценка на диапазон (например при въвеждане на числото "10" следва да бъде изключение "невалидно", тъй като тя няма) да) по време на изпълнение на програмата просто ще пристъпи към код, който се намира в с изключение на блока (всичко, което е между изключение и край;) , Така че ние ще обработим всички грешки, а потребителят не знае, че има някаква грешка. Тя ще се приеме, че програмата работи добре.

Тази обработка на грешки, често е необходимо. Така потребителят може да се направи, за да въведете данните за толкова дълго, колкото той не въведете правилната Дън.

Въпреки че не може да разглоби този код. Аз просто го заведе, когато се опитвате да тече този код. Но аз ще ви обясни как тя работи. Ето програмата ще принуди потребителя да въвежда данни, докато грешката ще се случи, когато се работи с данните, вписани. В момента, в който сте въвели коректни данни, софтуерът спира да работи.

Сега е ред на втория процесор опит - най-накрая. Както казах, това боравене блок изключение се характеризира с това, че това, което е в най-накрая блок ще бъде изпълнена не задължително в зависимост от това дали е имало грешка в времето за изпълнение на програмата, или не е било. Помислете за пример с оценките, само показване на съобщения за това, дали грешката е в обработката на данни, или не е било.

Нека да анализираме кода. В самото начало беше посочено Булева «ми», в която се съхраняват данните от това дали изпълнението на програмата, без грешки. Poskolu аз не знам, програмата е без грешки, дали сте готови, я зададете стойност "кутии" (което означава, че програмата ще се извършва с грешка). Ако програмата се изпълнява, без грешки, а след това тази променлива ще бъде настроен на истинската линия «ми: = вярно;». Блок «накрая» е условен израз, че променливите «ми» съдии дали грешката е при изпълнението на програмата. Останалото вече знаете.

Само в този подход, има един значителен недостатък за решаване на проблемите. Тази обработка на данни единица не се справят с проблема. Ако те се появят, програмата най-накрая ще блокира и да даде грешка по време на работа:

Той направи програма за грешка

Грешка по време на работа: System.FormatException: Input низ е невалиден.

в PABCSystem.PABCSystem.Read (Байт х) в E: \ Паскал \ PascalABC.NET \ LibSource \ PABCSystem.pas: Онлайн 3672

. В Program1.Program $ Main () в E: \ Паскал \ PABCWork.NET \ Program1.pas: Онлайн 20

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

В този пример, ако възникне грешка, а след това ще се появи съобщение, като:

Възникна грешка по време на изпълнение на програмата

Той направи програма за грешка

и ако програмата се изпълнява без грешка, тя ще се появи съобщение, като например:

програмата успешно

Обработка поотделно грешки

Не мислите ли, че е странно, че не е настъпила някаква грешка (вход грешка, компютърна грешка.), Ще се изпълнява винаги е един и същ код. Това не е напълно вярно, защото ние не информира потребителите какво се е случило в програмата и какво е било грешката си. За да направите това, излезе с да поставите в изключение на блок, може да се каже, операторът е ulovny

където Exception_Name - име изключение

Тази "условен израз" проверки: дали изключение се хвърля с името Exception_Name. И, ако тя е била причинена, а след това програмата продължава с този код оператор.

Въпреки това, тази "условен израз" има един (за някого) значителен недостатък. Това твърдение не може да се постави с други оператори. Това означава, че ако решите да се всеки един от възможните грешки обработка индивидуален начин и след лечението (или предварително третиране), за да се покаже soobscheie вид "Възникна грешка във времето да отговарят на следните", след което да покаже съобщение за грешка, а след това ще имате проблеми с това. В Паскал, ако в блока освен решите да използвате оператор «на», а след това, в допълнение към тези оператори, не се отпечатва.

И сега разгледаме пример с оценките и отделните манипулатори изключение.

Сега, всяка грешка ще бъде обработена относно. (Внимание! В този код, аз промени името на изключение, ако неточни данни на «DivideByZeroException» (Разделя се на 0 грешка), като че ли изведнъж неидентифициран изключение, ще бъде възможно да се открие и отстрани. На деление с 0 грешка в този код по принцип не може да се).

Сега помислете този код. Ето две от блока опитам. Един от тях се опита-накрая (следи за изпълнението и, ако програмата не е изпълнен в пълен размер, това означава, че е имало грешка в прогрес и искате да се появи съобщение "в е възникнала грешка по време на работа." А по-точна информация за грешка показва блок с изключение на (да. за всеки случай, аз ще кажа, че един опит не може да бъде само на две пресечки, с изключение на ф накрая). и освен малцина "условни" блок, които проверяват външния вид на изключение с вашето име и ако това се случи, след извършване на тяхната действия.

По този начин, ние сме се научили да се справят с грешки при въвеждането и всякакви други грешки, които можем да се срещнат в програмирането. Да, аз бях на пример polsednem изключение «DivideByZeroException» за обработка на данни, въведени коректност вместо тяхното изключване. В Pascal, можете да създадете свои собствени изключения, но повече за това по-късно. Сега имаме достатъчно опит, за да го направят.

  • Вие сте тук:
  • основен
  • програмиране образование
  • Паскал ABC .NET
  • Грешка при обработка на Паскал ABC.NET