Millist operaatorit kasutatakse javascripti erandite loomiseks. JavaScript: erandid. Erandjuhtimine ja tingimused

Konstruktsioon try...catch võimaldab kontrollida koodiplokki vigade suhtes.

JavaScript – vigade püüdmine

Internetti sirvides oleme kõik kohanud JavaScripti hoiatusakent, mis annab teada, et ilmnes käitusaegne tõrge, ja küsib "Kas soovite siluda?" Selline veateade võib olla kasulik arendajatele, kuid mitte kasutajatele. Kui kasutajad näevad vigu, kipuvad nad veebilehelt lahkuma.

See õpetus õpetab teile, kuidas peatada ja käsitleda JavaScripti veateateid, et mitte kaotada oma vaatajaid.

proovi ... püüda konstrueerida

Konstruktsioon try ... catch võimaldab teil kontrollida koodiplokki vigade suhtes. Prooviplokk sisaldab koodi, mis käivitatakse ja kontrollitakse, ning püüdmisplokk sisaldab koodi, mis käivitatakse vigade ilmnemisel.

Süntaks
proovige
{
//Käivita siin mingi kood
}
püüda (viga)
{
//Siin vigade käsitlemisel
}

Pange tähele, et proovi ... püüdmine on kirjutatud väiketähtedega (väikesed tähed). Suurtähtede kasutamine tekitab JavaScripti vea!

Näited

Allolev näide peaks kuvama hüpikakna "Tere tulemast külaline!" kui vajutada hiirenuppu. Funktsioonis message() on aga kirjaviga. alert() trükitakse kui adddlert(). Ilmub JavaScripti viga. Püügiplokk tabab vea ja käivitab selle käsitlemiseks lisakoodi. Kood kuvab kohandatud veateate, mis teavitab kasutajat juhtunust:

Järgmises näites kasutatakse kinnituskasti, et kuvada kohandatud sõnum, mis annab kasutajatele teada, et nad saavad jätkamiseks klõpsata OK või avalehele minemiseks nuppu Tühista. Kui meetod tagastab vale, on kasutaja klõpsanud Loobu ja kood suunab kasutaja ümber. Kui meetod tagastab tõene, ei tee kood midagi:

Näide



var txt="";
funktsiooni sõnum ()
{
proovige
{

}
püüda (viga)
{

Kui(!kinnita(txt))
{
document.location.href="http://site/";
}
}
}


Viimane uuendus: 23.10.2018

Mõnikord ilmnevad programmi täitmisel vead, mida on raske ette näha või ette näha, mõnikord aga isegi võimatud. Näiteks faili üle võrgu edastamisel võib võrguühendus ootamatult katkeda. selliseid olukordi nimetatakse eranditeks. C#-keel pakub arendajatele võimalusi selliste olukordade lahendamiseks. Selle jaoks on loodud C#-s konstrueerimine proovi... püüda...lõpuks.

Proovi ( ) püüda ( ) lõpuks ( )

Kui kasutate plokki try...catch..finally block, täidetakse kõigepealt kõik try-ploki laused. Kui selles plokis erandeid ei esine, siis pärast selle täitmist alustatakse lõpliku ploki täitmist. Ja siis proovi..catch..viimaks lõpetab oma töö.

Kui katseplokis ilmneb ootamatult erand, peatub tavaline täitmiskäsk ja CLR hakkab otsima püüdmisplokki, mis saaks erandiga hakkama. Kui leitakse õige püüdmisplokk, siis see käivitatakse ja pärast selle lõpetamist käivitatakse viimane plokk.

Kui vajalikku püüdmisplokki ei leita, siis erandi ilmnemisel lõpetab programm oma täitmise ebanormaalselt.

Kaaluge järgmist näidet:

Klassiprogramm ( staatiline tühimik Main(string args) ( int x = 5; int y = x / 0; Console.WriteLine($"Tulemus: (y)"); Console.WriteLine("Programmi lõpp"); Konsool.Loe ( ) )

Sel juhul jagatakse arv 0-ga, mis loob erandi. Ja kui käivitame rakenduse silumisrežiimis, näeme Visual Studios akent, mis teavitab meid erandist:

Selles aknas näeme, et on toimunud erand, mille tüüp on System.DivideByZeroException, st nulliga jagamise katse. Üksuse Vaata üksikasju kasutades saate vaadata erandi kohta üksikasjalikumat teavet.

Ja sel juhul ei jää meil muud üle kui programm lõpule viia.

Sellise programmi krahhi vältimiseks peaksite erandite käsitlemiseks kasutama konstruktsiooni try...catch...finally. Niisiis, kirjutame näite ümber järgmiselt:

Klassiprogramm ( staatiline void Main(string args) ( proovi ( int x = 5; int y = x / 0; Console.WriteLine($"Tulemus: (y)"); ) püüdke ( Console.WriteLine("Tekkis erand ! "); ) lõpuks ( Console.WriteLine("Lõpuks blokeeri"); ) Console.WriteLine("Programmi lõpp"); ​​Console.Read(; ) )

Sel juhul on meil prooviplokis jälle erand, kuna proovime jagada nulliga. Ja joonele jõudmine

Int y = x / 0;

programmi täitmine peatub. CLR leiab püüdmisploki ja edastab juhtimise sellele plokile.

Pärast püüdmisplokki täidetakse viimane blokk.

Erand on toimunud! lõpuks blokeeri Programmi lõpp

Seega programm ikkagi ei teosta nulliga jagamist ja seetõttu ei prindi selle jagamise tulemust, kuid nüüd see ei jookse kokku ja erandit käsitletakse püüdmisplokis.

Tuleb märkida, et see konstruktsioon nõuab prooviplokki. Kui meil on püüdmisplokk, võime lõpliku ploki välja jätta:

Proovige ( int x = 5; int y = x / 0; Console.WriteLine($"Tulemus: (y)"); ) püüda ( Console.WriteLine("Tekkis erand!"); )

Ja vastupidi, kui meil on lõplik blokk, võime püüdmisploki välja jätta ja erandit mitte käsitleda:

Proovige ( int x = 5; int y = x / 0; Console.WriteLine($"Result: (y)"); ) lõpuks ( Console.WriteLine("Lõpuks blokeeri"); )

Kuigi selline konstruktsioon on C# süntaksi seisukohalt üsna õige, siis kuna CLR ei leia vajalikku püüdmisplokki, siis erandit ei käsitleta ja programm jookseb kokku.

Erandjuhtimine ja tingimused

Arendaja võib ette näha mitmeid erandolukordi. Näiteks lubage programmil sisestada arv ja väljastada selle ruut:

Static void Main(string args) ( Console.WriteLine("Sisesta arv"); int x = Int32.Parse(Console.ReadLine()); x *= x; Console.WriteLine("Ruutarv: " + x) ; Console.Read();

Kui kasutaja sisestab mitte numbri, vaid stringi või mõne muu märgi, annab programm veateate. Ühest küljest on just selline olukord, kui võimaliku vea käsitlemiseks saab kasutada try..catch plokki. Siiski oleks palju parem kontrollida teisenduse kehtivust:

Static void Main(string args) ( Console.WriteLine("Sisesta arv"); int x; stringi sisend = Console.ReadLine(); if (Int32.TryParse(sisend, välja x)) ( x *= x; Console WriteLine("Arvu ruut: " + x) else ( Console.WriteLine("Vigane sisend"); ) Console.Read();

Meetod Int32.TryParse() tagastab tõene, kui teisendust saab teostada, ja false, kui seda ei saa teha. Kui teisendus on kehtiv, sisaldab muutuja x sisestatud numbrit. Nii et ilma try...catch'i kasutamata saate võimaliku erandiga hakkama.

Toimivuse seisukohalt on try..catch plokkide kasutamine kulukam kui tingimussõnade kasutamine. Seetõttu on võimalusel try..catch asemel parem kasutada erandlike olukordade kontrollimiseks tingimuslikke konstruktsioone.

T-SQL keeles, nagu ka paljudes teistes programmeerimiskeeltes, on täna võimalik vigade jälgimine ja pealtkuulamine TRY CATCH konstruktsioon, mille abil saame hakkama erandlike olukordadega, s.t. ootamatud vead.

Nagu te juba aru saate, ei räägi me süntaksivigadest, millest SQL-server teavitab meid juba enne SQL-i käskude täitmist, vaid vigadest, mis võivad teatud tingimustel esineda konkreetses koodiosas.

Lihtsaim näide on nulliga jagamine Nagu te teate, ei saa te nulliga jagada, kuid see arv võib siiski esineda jagamise operatsioonides. Ebastandardsete, ebaõigete andmetega tehtavatel toimingutel võib esineda ka muid vigu, kuigi tavaandmetega tehakse samad toimingud vigadeta.

Seetõttu on Transact-SQL keeles spetsiaalne konstruktsioon TRY...CATCH, mis ilmus SQL serveri 2005. aasta versioonis ja mida kasutatakse vigade käsitlemiseks. Kui keegi tunneb teisi programmeerimiskeeli, siis see konstruktsioon on teile suure tõenäosusega tuttav, kuna seda kasutatakse paljudes programmeerimiskeeltes.

Märge! T-SQL keele täpsemaks uurimiseks soovitan algajatel programmeerijatel lugeda raamatut The T-SQL Programmer's Path. Transact-SQL keele õpetus.

TRY CATCH konstruktsiooni T-SQL-is

TRY CATCH on Transact-SQL-i konstruktsioon vigade käsitlemiseks. Kõik, mida soovite vigade suhtes kontrollida, st. Asetate TRY-plokki koodi, millesse võivad tekkida vead. Selle ploki algust tähistab käsk BEGIN TRY ja ploki lõppu vastavalt END TRY.

Mida iganes sa tahad teha, kui ilmneb viga, st. Need käsud, mida tuleb täita, kui TRY plokis tekib tõrge, paned CATCH plokki, selle algust tähistab BEGIN CATCH ja lõppu END CATCH. Kui TRY plokis tõrkeid ei esinenud, jäetakse CATCH plokk vahele ja täidetakse sellele järgnevad juhised. Kui ilmnevad vead, siis täidetakse CATCH-plokis olevad käsud ja seejärel sellele plokile järgnevad käsud, teisisõnu täidetakse kõik CATCH-plokile järgnevad käsud, välja arvatud juhul, kui me loomulikult ei katkestanud ploki täitmist sunniviisiliselt. pakendis CATCH.

CATCH plokk ise ei edasta helistavale rakendusele infot tuvastatud vigade kohta, kui on vaja näiteks välja selgitada vea number või kirjeldus, siis selleks saad kasutada SELECT, RAISERROR või PRINT lauseid; CATCH plokk.

Olulised punktid TRY CATCH konstruktsiooni kohta T-SQL-is
  • CATCH-plokk peab tulema kohe pärast TRY-plokki, käskude paigutamine nende plokkide vahele ei ole lubatud;
  • TRY CATCH püüab kinni kõik vead, mille tõsiduskood on suurem kui 10, mis ei sulge andmebaasiühendusi;
  • Konstruktsioonis TRY...CATCH saate kasutada ainult ühte paketti ja ühte SQL-lausete plokki;
  • TRY...CATCH konstruktsiooni saab pesastada, näiteks TRY plokis võib olla teine ​​TRY...CATCH konstruktsioon või CATCH plokki saab kirjutada veakäsitleja juhuks, kui CATCH plokis endas tekivad vead;
  • GOTO lauset ei saa kasutada TRY või CATCH plokkide sisestamiseks, seda saab kasutada ainult TRY või CATCH plokkide siltide juurde hüppamiseks;
  • TRY...CATCH vigade käsitlemist kasutaja määratud funktsioonides ei toetata;
  • Konstruktsioon TRY...CATCH ei käsitle järgmisi tõrkeid: hoiatus- ja teabeteated, mille raskusaste on 10 või madalam, kliendi põhjustatud ühenduse katkestamine ja administraatori katkestamine KILL-lause abil.
Funktsioonid veateabe hankimiseks

CATCH-ploki käivitamise põhjustanud vigade kohta teabe saamiseks saate kasutada järgmisi funktsioone:

  • ERROR_NUMBER() – tagastab vea numbri;
  • ERROR_MESSAGE() - tagastab vea kirjelduse;
  • ERROR_STATE() - tagastab vea olekukoodi;
  • ERROR_SEVERITY() – tagastab vea raskusastme;
  • ERROR_PROCEDURE() – tagastab salvestatud protseduuri või päästiku nime, milles viga ilmnes;
  • ERROR_LINE() – tagastab vea põhjustanud käsu reanumbri.

Kui neid funktsioone kutsutakse väljaspool CATCH-plokki, tagastavad nad väärtuse NULL.

Näide konstruktsiooni TRY...CATCH kasutamisest vigade käsitlemiseks

Et demonstreerida, kuidas konstruktsioon TRY...CATCH töötab, kirjutame lihtsa SQL-lause, milles teeme tahtlikult vea, näiteks proovime teostada nulliga jagamist.

Vigade käsitlemise ploki algus BEGIN TRY – Juhised, milles võivad esineda vead DECLARE @TestVar1 INT = 10, @TestVar2 INT = 0, @Rez INT SET @Rez = @TestVar1 / @TestVar2 END TRY - ploki CATCH algus BEGIN CATCH - - Vea ilmnemisel tehtavad toimingud SELECT ERROR_NUMBER() AS [Vea number], ERROR_MESSAGE() AS [Vea kirjeldus] SET @Rez = 0 END CATCH SELECT @Rez AS [Tulemus]

Sel juhul kuvame veanumbri ja kirjelduse funktsioonide ERROR_NUMBER() ja ERROR_MESSAGE() abil ning määrame lõpptulemuse muutujale ka väärtuse 0, nagu näeme, jätkatakse CATCH ploki järel olevate juhiste täitmist.

See on minu jaoks kõik, loodan, et materjal oli teile kasulik, hüvasti!

Selles näites oleme teinud koodis kirjavea (trükiplokis ).

Näide peaks hoiatama "Tere tulemast külaline!", kuid hoiatus on valesti kirjutatud.

Püügiplokk tabab vea ja käivitab selle käsitlemiseks koodi:




proovi (
addlert("Tere tulemast külaline!");
}
püüda(viga) (
document.getElementById("demo").innerHTML = err.message;
}

Rohkem näiteid "Proovige ise" allpool.

Määratlus ja kasutamine

Lause try/catch/finally käsitleb mõningaid või kõiki vigu, mis võivad koodiplokis esineda, samal ajal kui koodi töötab.

Vigadeks võivad olla programmeerija tehtud kodeerimisvead, valest sisendist tulenevad vead ja muud ettenägematud asjad.

Proovilause võimaldab teil määratleda koodiploki, mida selle käivitamise ajal vigade suhtes testitakse.

Püügilause võimaldab määratleda käivitatava koodiploki, kui try-plokis ilmneb viga.

Viimane lause võimaldab teil pärast püüdmist ja püüdmist koodi käivitada, olenemata tulemusest.

Märkus. Cat-lause ja lõpuks laused on mõlemad valikulised, kuid try-lause kasutamise ajal peate kasutama ühte neist (kui mitte mõlemat).

Näpunäide. Vea ilmnemisel JavaScript tavaliselt peatub ja genereerib veateate. Kasutage viskelauset kohandatud vea loomiseks (viske erand). Kui kasutate viska koos funktsiooniga try and catch , saate juhtida programmivoogu ja genereerida kohandatud veateateid.

JavaScripti vigade kohta lisateabe saamiseks lugege JavaScripti vigade õpetust.

Brauseri tugi avaldus
proovi/püüa/lõpuks Jah Jah Jah Jah Jah
Süntaks

proovi (
tryCode – proovimiseks mõeldud koodiplokk
}
püüda( eks) {
catchCode – koodiplokk vigade käsitlemiseks
}
lõpuks (
finalCode – koodiplokk, mis tuleb käivitada olenemata proovimise / püüdmise tulemusest
}

Parameetrite väärtused Parameetri kirjeldus
tryCode Nõutud. Koodiplokk, mida testitakse täitmise ajal vigade suhtes
eks Nõutav, kui seda kasutatakse koos saagiga. Määrab kohaliku muutuja, mis viitab veale. Muutuja võib viidata objektile Error (sisaldab teavet ilmnenud tõrke kohta, näiteks teade "addlert ei ole määratletud"). Kui erand loodi viskalausega, viitab muutuja viskalauses määratud objektile (vt "Rohkem näiteid")
püüdmiskood Valikuline. Täitatav koodiplokk, kui prooviplokis ilmneb viga. Kui viga ei ilmne, ei käivitata seda koodiplokki kunagi
lõpuks kood Valikuline. Käivitatav koodiplokk olenemata proovimise / püüdmise tulemusest
Tehnilised detailid JavaScripti versioon:
ECMAScript 3
Veel näiteid

See näide uurib sisendit. Kui väärtus on vale, tehakse erand (err).

Erandi (err) tabab püüdmisavaldus ja kuvatakse kohandatud veateade:



Sisestage arv vahemikus 5 kuni 10:


Testi sisend


funktsioon myFunction() (
var sõnum, x;
sõnum = document.getElementById("sõnum");
message.innerHTML = "";
x = document.getElementById("demo").väärtus;
proovi (
if(x == "") viska "on tühi";
if(isNaN(x)) viska "mitte arv";
if(x > 10) viska "liiga kõrgele";
if(x< 5) throw "too low";
}
püüda(viga) (
message.innerHTML = "Sisend" + viga;
}
}

Tere! Selles õppetükis tahaksin rääkida JavaScripti vigadest ja nende tegelikust käsitlemisest. Lõppude lõpuks juhtub sageli, et aeg-ajalt tuleb ette tõrkeid ja see pole isegi programmeerimiskogemuse või isegi selle täieliku puudumise küsimus. Lõppude lõpuks teevad ka kogenud programmeerijad vigu;

Vigu on peamiselt kahte tüüpi - süntaktilisi ja loogilisi. Süntaktilised vead hõlmavad vigu muutujate nimedes, funktsioonides ja vead koodi süntaksis. Põhimõtteliselt on selliseid vigu lihtne brauseri konsooli kaudu tabada.

Kuid loogikavead pole nendega nii lihtsad, kuna need põhjustavad programmi koodi vale täitmist. Seetõttu peate nende kõrvaldamiseks programmi siluma, et mõista, mis skripti igal etapil tegelikult toimub. Siin käsitleme peamiselt süntaksivigade lokaliseerimist, kasutades konstruktsiooni try...catch.



Proovige… püüdke üles vea püüdmise struktuur

Konstruktsioon try..catch koosneb 2 plokist: proovi ja siis püüa. Siin on näide üldisest kirjest

Proovige ( // kood... ) püüda (err) ( // vigade käsitlemine )

See disain töötab järgmiselt:

  • Käitatakse prooviploki sees olev kood, nn trap.
  • Kui vigu ei esine, ignoreeritakse plokki catch(err).
  • Kuid kui selles ilmneb tõrge, katkestatakse proovi täitmine vea korral ja juhtimine läheb üle catch(err) ploki algusesse. Sel juhul sisaldab err muutuja (saate valida mis tahes muu nime) veaobjekti koos üksikasjaliku teabega ilmnenud vea kohta.
  • Seega, kui try'is on viga, siis skript ei peatu ja veelgi enam, meil on võimalus tõrget käsitleda püüdmisploki sees.

    Vaatame seda näidetega.

    • Näide ilma vigadeta: käivitamisel käivitatakse hoiatus (1) ja (2): try ( alert("Try Block"); // (1)