Cum să prindeți mai multe excepții în Python: un ghid ușor

Captarea excepțiilor în Python vă ajută să vă asigurați că programele dvs. se blochează mai rar. Acest lucru face codul dvs. mai fiabil și oferă o experiență mai bună pentru utilizator. În acest articol, voi discuta cum să prindeți mai multe excepții în același bloc try/except în Python.

Ce sunt excepțiile în Python?

În Piton, Excepțiile sunt un mecanism de comunicare între diferite părți ale programului. Acest mecanism de comunicare permite unei părți a sistemului să comunice că a întâmpinat o eroare critică pe care nu știe cum să o gestioneze.

Deci, ridică o excepție. O altă parte a programului care știe cum să gestioneze eroarea va prinde excepția și va trata corect eroarea.

Când nu sunt gestionate, excepțiile vor bloca programul. Prin urmare, gestionarea excepțiilor previne prăbușirea programului și îl face mai fiabil.

Pentru acest articol, voi presupune că sunteți deja familiarizat cu elementele de bază ale ridicării și gestionării excepțiilor, care sunt tratate în acest articol Introducere în Python Try/Except.

Importanța gestionării mai multor excepții în Python

  • Reduce duplicarea codului, deoarece excepțiile multiple sunt gestionate de același bloc. Acest lucru face codul mai ușor de citit, editat și șters.
  • De asemenea, vă ajută să scrieți cod mai eficient, deoarece tipul de eroare trebuie verificat o singură dată în loc de mai multe ori.
  Ce este Digital Twin și de ce este important în IoT?

Gestionarea mai multor excepții

Captarea mai multor excepții se referă la situația în care mai multe excepții sunt surprinse folosind același bloc except. În Python, puteți prinde diferite excepții individuale, cu excepția blocurilor.

Alternativ, atunci când doriți să gestionați excepțiile într-un mod similar, le puteți gestiona folosind un singur bloc. Pentru a face acest lucru, va trebui să prindeți mai multe excepții. În această secțiune, voi explica cum se face asta cu un exemplu.

#1. Prinderea diferitelor excepții în diferite blocuri

Să presupunem că avem un program conceput să preia două valori diferite și să le împartă. În acest program, anticipăm că vor fi ridicate diferite tipuri de excepții atunci când utilizatorul introduce valori nevalide. În special, dorim să gestionăm ValueError și ZeroDivisionError.

ValueError va fi ridicată atunci când utilizatorul introduce o valoare care nu poate fi convertită într-un număr întreg. ZeroDivisionError va fi ridicată când al doilea număr este zero. În ambele cazuri, dorim să afișăm un mesaj de eroare care spune „Ați introdus o valoare nevalidă”.

Pentru a face cele de mai sus, putem scrie următorul cod:

try:
    dividend = int(input('Enter first num: '))
    divisor = int(input('Enter second num: '))
    quotient = dividend / divisor
    print(quotient)
except ValueError as e:
    print("You entered an invalid value")
except ZeroDivisionError as e:
    print("You entered an invalid value")
except Exception as e:
    print("Something went wrong")

Dacă rulăm codul și textul de mai sus care nu pot fi convertite într-un număr întreg, acesta va fi rezultatul:

Și dacă am introduce al doilea număr ca 0, acesta ar fi rezultatul:

Codul funcționează conform așteptărilor, dar observați că gestionăm ValueError și ZeroDivisionError în mod similar. Deci, există o mulțime de duplicare a codului între cele două blocuri Except. Acest lucru nu este ideal, deoarece încălcăm principiul DRY în programare. Principiul DRY spune să nu te repete.

  AI public vs. AI privat vs. AI personal: Care este diferența?

Deci, în loc să scriem codul separat, putem combina cele două blocuri într-un singur bloc care prinde mai multe excepții. Dacă facem așa, evităm repetarea.

#2. Prinderea mai multor excepții într-un singur bloc cu excepția

Pentru a prinde mai multe excepții, oferim un tuplu care specifică toate erorile pe care dorim să le prindem. Iată un exemplu în care prindem atât ValueError, cât și ZeroDivisionError într-un singur bloc, cu excepția blocului:

try:
    dividend = int(input('Enter first num: '))
    divisor = int(input('Enter second num: '))
    quotient = dividend / divisor
    print(quotient)
except (ValueError, ZeroDivisionError) as e:
    print("You entered an invalid value")
except Exception as e:
    print("Something went wrong")

Aceasta este o implementare mult mai bună decât codul anterior. În esență, despre aceasta este gestionarea mai multor excepții. Codul de mai sus funcționează în același mod ca înainte. Dacă testați folosind exemplele anterioare, ar trebui să funcționeze ca înainte:

#3. Identificarea carei excepții a fost prinsă

Codul de mai sus execută primul bloc except atunci când a fost prins fie o ValueError, fie o ZeroDivisionError. În unele cazuri, este posibil să aveți cod pe care doriți să îl executați pentru ambele erori și alt cod pe care doriți să îl executați pentru una, dar nu pentru cealaltă eroare.

În acest caz, trebuie mai întâi să identificați ce eroare a fost surprinsă și să executați codul corespunzător.

Pentru a identifica care excepție a fost capturată, puteți utiliza un bloc if/else în interiorul blocului except. De exemplu:

try:
    dividend = int(input('Enter first num: '))
    divisor = int(input('Enter second num: '))
    quotient = dividend / divisor
    print(quotient)
except (ValueError, ZeroDivisionError) as e:
    print("You entered an invalid value")

    if isinstance(e, ValueError):
        print('Value Error')
    else:
        print('Zero Division Error')
except Exception as e:
    print("Something went wrong")

În acest bloc, pe lângă tipărirea mesajului de eroare generic atât pentru ValueError, cât și pentru ZeroDivisionError, verificăm exact ce tip de eroare am prins și imprimăm un mesaj suplimentar. Dacă testăm din nou codul, ar trebui să vedem câteva mesaje suplimentare specifice excepției prinse.

  Cum să începeți cu fotografia de film

Când ați dori să gestionați mai multe excepții?

În cazul general, gestionarea mai multor excepții este ideală atunci când doriți să executați același cod pentru excepții similare care ar putea fi ridicate. Aceasta include următoarele:

  • Solicitări de rețea care au eșuat din diferite motive. Indiferent, poate doriți să notificați utilizatorul că serverul nu a putut fi contactat.
  • Conexiuni la baze de date eșuate, care produc mai multe erori. Deși aceste erori pot fi diferite, gestionarea dvs. poate fi aceeași.
  • File I/O produce, de asemenea, erori care pot fi tratate în mod similar, cum ar fi permisiunea și erorile de disc plin.

Concluzie

Acest articol a discutat despre combinarea mai multor blocuri cu excepția într-unul singur prin capturarea mai multor excepții simultan. Acest lucru ajută codul să devină mai lizibil și mai ușor de întreținut. În continuare, poate doriți să citiți acest articol despre proiectele Python pentru începători pe care ar trebui să le încercați.