Depanarea în Python

Când menționăm depanare, acest lucru înseamnă că poate exista gândac in mijloc. Ei bine, nu vreau să spun că o eroare ar putea fi găsită într-o casă - ceea ce vreau să spun este un bug de programare!

Înainte de a vă deplasa mai departe cu acest tutorial, să lăsăm niște termeni în afara. Să definim pe scurt ceea ce înțelegem prin a gândac și depanare

Gandaci

O eroare în calcul ar putea apărea atât în ​​software, cât și în hardware, dar accentul nostru este pus pe software. Permiteți-mi să menționez repede o credință în cazul în care termenul gândac ar fi putut să provină. Se crede că prima utilizare a termenului gândac în calcul a fost atunci când a real bug-ul (molia) a fost găsit într-unul din releele calculatorului Mark II. Termenul gândac a fost de asemenea folosit la sfârșitul secolului al XIX-lea pentru a descrie problemele tehnice.

Bugurile în software provoacă ca programul să producă comportament neintenționat. Este un termen folosit în mod obișnuit pentru a face referire la un eroare cu locație și motiv necunoscut și pot provoca probleme grave (adică crashing un program).

In aceasta situatie, depanare intră în joc.

Debugging

Ei bine, se poate spune că cel mai bun mod de a evita orice probleme nu este de a genera bug-uri în primul rând. Dar acest lucru este din păcate destul de rar și nu este ușor să generezi un program curat de la început. Având bug-uri este o situație normală pe care o veți cădea.

Debugging este procesul de localizare, analizare și corectare a oricărei erori (erori) pe care s-ar putea întâlni. Scopul final al depanării este de a elimina astfel de bug-uri și de a produce un program care rulează și se comportă conform destinației. Este important de reținut aici că, de cele mai multe ori, va fi cheltuită pentru localizarea bug-ului deoarece, așa cum am menționat mai sus, el are inițial o locație necunoscută.

Pentru a avea o idee despre cât de greu ar putea fi depanarea, vezi ce a spus Brian W. Kernighan:

Toată lumea știe că depanarea este de două ori mai dificilă decât scrierea unui program în primul rând. Deci, dacă ești atât de deștept cum poți fi atunci când o scrii, cum o vei depana vreodată?

Manipularea excepțiilor Python

Un excepție este un obiect care indică faptul că avem o eroare (eroare). Cu alte cuvinte, Python folosește excepții pentru a comunica că există bug-uri în program. Aceasta ar fi localizare parte a procesului de depanare. Primirea obiectului de excepție și efectuarea acțiunilor necesare pentru a face față erorii se referă la manipulare exceptia. Aceasta ar fi analizand și corectarea pași în procesul de depanare.

Încercați Declarația

lui Python încerca declarația este folosită pentru tratarea excepțiilor și are două forme: încercați / cu excepția și încercați / în cele din urmă. În primul caz, încerca clauza poate fi urmată de una sau mai multe cu exceptia clauze, în timp ce în cel de-al doilea caz, acesta poate fi urmat de numai unul in cele din urma clauză.

încercați / cu excepția

încercați / cu excepția sintaxa este după cum urmează:

try: # încercați codul de bloc cu excepția: # cu excepția codului blocului

Corpul încerca clauza va conține cod care ar putea genera o excepție, cu condiția ca dacă o excepție a fost generată, toate instrucțiunile din bloc sunt sărite. Pe de altă parte, corpul cu exceptia clauza se numește excepție, deoarece este folosit pentru a prinde excepția. cu exceptia codul de blocare va fi executat numai dacă a fost generată o excepție, altfel blocul va fi omis. Puteți utiliza excepțiile integrate, așa cum se arată în Biblioteca standard Python. 

Să luăm un exemplu pentru a face lucrurile mai clare. Spuneți că ni sa cerut să introducem un numitor într-o formulă de diviziune. Deoarece împărțirea prin zero nu este permisă, să scriem a încercați / cu excepția declarație care verifică dacă există o diviziune la zero și tipărește un mesaj dacă apare această eroare.

Denominator = input ('Introduceți o valoare a numitorului:') încercați: formula = 15 / numitorul de imprimare 'Rezultatul este' + str (formula) cu excepția ZeroDivisionError: 

Dacă introduceți valoarea 5, de exemplu, veți obține următoarele rezultate:

Rezultatul este 3

Acum, încercați să introduceți valoarea 0 ca intrare. Ce ieșire veți obține în acest caz?

încercați / în cele din urmă

încercați / în cele din urmă este o altă modalitate de a scrie instrucțiunea de încercare în Python. in cele din urma clauzele sunt numite curat-up / terminare clauze, deoarece acestea trebuie întotdeauna să fie difuzate indiferent dacă a avut loc o excepție în încerca bloc.

Să încercăm exemplul din secțiunea de mai sus, dar cu in cele din urma clauză:

Denominator = input ('Introduceți o valoare a numitorului:') încercați: formula = 15 / numitor imprima 'Rezultatul este' + str (formula) 

Observați că atunci când introduceți valoarea 5 ca intrare, de exemplu, veți obține următoarea ieșire:

Rezultatul este 3 Ai încercat să împartă cu zero ceea ce nu este permis

Creșterea cuvântului cheie

a ridica cuvântul cheie este un alt mod de a trata excepțiile din Python. În acest caz, veți putea să vă ridicați propriile excepții - adică excepții care apar atunci când apare o problemă care nu se încadrează în sfera erorilor așteptate.

Să aruncăm o privire asupra unui exemplu de utilizare a a ridica cuvânt cheie pentru a înțelege conceptul mai mult.

încercați: x = input ('Introduceți un număr în intervalul 1-10:') dacă x<1 or x>10: Ridicați excepția de imprimare "Mare! M-ai ascultat și ai introdus un număr valabil 'cu excepția: print' Numărul tău pare să fie în afara intervalului 1-10 '

În acest exemplu, dacă introduceți un număr în afara intervalului permis, imprimare declarație în cu exceptia bloc va fi executat.

Continuați, încercați câteva valori și verificați ieșirea.

Modulul de urmărire

lui Python traceback modulul este un alt mod de a face față excepțiilor din Python. Acesta este utilizat în principal pentru a imprima urme de stivă ale unui program după o excepție. traceback conține mesajul de eroare, numărul liniei care a cauzat eroarea și stivă de apeluri, aceasta este secvența apelurilor pentru funcții care au dus la eroare.

Să luăm un exemplu care generează a traceback:

def createException (nume): ridica excepția ('Se pare că' + nume + 'a ridicat o excepție') createException ('Abder')

Dacă executați acest script, veți obține o ieșire care arată după cum urmează:

Traceback (cel mai recent apel ultimul): Fișierul "test.py", linia 4, în  createException ("Abder") Fișierul "test.py", linia 2, în createException ridica Excepție ("Se pare că" + nume + "a ridicat o excepție) Excepție: Se pare că Abder a ridicat o excepție

Observați că eroarea (eroarea) sa întâmplat randul 2 în createException funcţie. Observați, de asemenea, că stiva de apeluri ne poate ajuta în urmărirea apelului care a dus la eroarea, care în acest caz este apelul care a avut loc în linia 4.

Tutorialul devine din ce în ce mai lung și aș vrea să mă opresc în acest moment. După cum ați văzut, programele de depanare sunt într-adevăr un lucru natural și regulat de făcut și cred că tipurile de erori pe care le-ați văzut în acest tutorial sună familiar, nu?

Există și alte modalități de depanare a unui program Python și de tratare a excepțiilor. Un mod binecunoscut, de exemplu, este afirmă declarația

Depanare fericită!

Cod