Capitolul 27. Elementele de bază ale excepțiilor
excepțiile (jocul intenționat al cuvintelor), așa cum se va arăta mai jos, tratarea excepțiilor în Python este foarte simplă, deoarece acestea sunt integrate direct în limba în sine, precum și alte instrumente de nivel înalt.
O notă tehnică înainte: după prima ediție a acestei cărți în excepțiile au fost două schimbări - propoziția în cele din urmă poate fi acum într-o încercare, împreună cu propuneri, cu excepția și altceva, și excepții definite programe de mina, trebuie acum să fie cazuri de clase, și nu doar rândurile de. În această ediție voi descrie atât vechile, cât și cele noi metode de lucru cu excepții, deoarece în codul existent veți întâlni deseori tehnicile originale. Pe parcurs, vă voi spune cum progresul a evoluat în acest domeniu. Voi descrie, de asemenea, noua instrucțiune cu, în ciuda faptului că aspectul său oficial este așteptat doar în următoarea versiune de Python.
Pe scurt, excepțiile vă permit să sari peste un fragment al unui program de lungime arbitrară. Să luăm în considerare un exemplu cu o mașină pentru pizza, care a fost menționată mai devreme în această carte. Să presupunem că am luat această idee în serios și de fapt a construit o astfel de mașină. Pentru a face pizza, mașina noastră culinară trebuie să execute un program scris în Python: trebuie să ia o comandă, să pregătească un aluat, să ia suplimente, să coacă o bază etc.
Acum, să presupunem că ceva a mers prost în momentul "basking de bază". Poate că cuptorul sa stricat, sau poate că robotul nostru a greșit când a calculat distanța până la cuptor și sa aprins. Evident, trebuie să asigurăm o tranziție rapidă la un cod de program care procesează rapid astfel de situații. În plus, pentru că, în astfel de condiții neobișnuite, nu avem nicio speranță pentru încheierea cu succes a procesului de gătire a pizza, am putea refuza totodată întregul plan.
Aceasta este exact ceea ce permite excepții: programul poate merge la un handler de excepție într-un singur pas, anulând toate apelurile pentru funcții. Excepția este un fel de "super goto". 1 Instrumentul de tratare a excepțiilor (încercarea de încercare) pune o etichetă și execută un cod de program. Dacă atunci există o excepție în program
1 Dacă ați utilizat limbajul C, va fi interesat să știe că excepțiile Niya în Python sunt un pic similar cu limbajul C standard pentru o pereche de funcții setjmp / longjmp: încercați de instrucțiuni acționează ca funcția setjmp, și cum să ridice longjmp de instrucțiuni. Numai în Python, excepțiile se bazează pe obiecte și reprezintă o parte standard a modelului de execuție.
De ce sunt necesare excepții?
interpretul revine imediat pe etichetă, anulând toate apelurile funcționale active care au fost efectuate după ce eticheta a fost setată. Codul din dispozitivul de tratare a excepțiilor poate răspunde în mod corespunzător (de exemplu, apelați pompierii). În plus, trecerea la procedura de tratare a excepțiilor se efectuează imediat, deci nu este de obicei necesară verificarea codurilor de retur ale fiecărei funcții numite care ar putea eșua.
Alocarea excepțiilor
În programele Python, excepțiile pot juca roluri diferite. Mai jos sunt câteva dintre ele, care sunt cele mai tipice:
Interpretul ridică o excepție de fiecare dată când detectează o eroare în timpul executării programului. Programul poate alege astfel de erori și le poate procesa sau pur și simplu le poate ignora. Dacă eroarea este ignorată, interpretul execută acțiunile implicite, oprește executarea programului și afișează un mesaj de eroare. Dacă acest comportament implicit este nedorit, puteți adăuga o instrucțiune de încercare care vă permite să interceptați erorile detectate și să continuați programul după încercarea de încercare.
Notificări despre evenimente
Excepțiile pot fi, de asemenea, folosite pentru a notifica anumite condiții, ceea ce elimină necesitatea de a transfera fie steagurile rezultate, fie de a le verifica în mod explicit. De exemplu, funcția de căutare poate ridica o excepție în caz de eșec, mai degrabă decât returnarea unei etichete întregi ca rezultat (și sperând că acest atribut va fi întotdeauna interpretat corect).
Excepție de manipulare
Unele condiții pot să apară atât de rar încât ar fi prea risipă să se prevadă verificarea declanșării unor astfel de condiții în vederea procesării lor. Adesea, astfel de teste de situații neobișnuite pot fi înlocuite de operatori care fac excepție.
După cum se va arăta mai târziu, instrucțiunea try / final vă permite să garantați executarea operațiunilor finale, indiferent de excepție.
Control neobișnuit al debitului
Și, în sfârșit, deoarece excepțiile sunt un fel de operator "goto", pot fi folosite ca bază pentru controlul exotic al fluxului de programe. De exemplu, trasarea inversă nu face parte din limba în sine, dar poate fi implementată