Python Încercați, cu excepția: explicat cu exemple

Python Try Except este o construcție folosită în Python pentru a gestiona excepțiile cu grație, fără a se bloca.

Gestionarea excepțiilor face codul programului mai fiabil și mai puțin probabil să eșueze. Acest articol ghidează gestionarea excepțiilor și scenariile comune în care gestionarea excepțiilor este ideală. Ca bonus, vom aborda și modul de ridicare a excepțiilor.

Ce este gestionarea excepțiilor?

Excepțiile sunt anomaliile critice și erorile care apar în timpul execuției unui program. Dacă nu sunt gestionate, excepțiile vor bloca programul. Prin urmare, gestionarea excepțiilor este o modalitate de a gestiona excepțiile pentru a vă asigura că nu blochează programul.

Iată un exemplu pentru a ilustra ce este o excepție.

user_input = input("Enter a number: ")
num = int(user_input)
print("Your number doubled is:", num * 2)

La prima vedere, se pare că nu este nimic în neregulă cu programul de mai sus. Acesta primește intrare de la utilizator și o convertește într-un număr întreg. Apoi, afișează numărul întreg furnizat de utilizator dublat.

Programul rulează bine dacă îl rulați cu o valoare de intrare de 5. Vezi mai jos.

Dar să presupunem că ai rulat din nou același program. Numai că de data aceasta, în loc să utilizați 5 ca intrare, introduceți șirul „bună ziua”. Programul se va bloca. Șirul „hello” nu poate fi convertit într-un număr întreg, așa că se ridică o excepție și programul se blochează.

De ce sunt ridicate excepții și de ce ar trebui să le gestionați?

Sunt ridicate excepții deoarece adesea descompunem programele în funcții atunci când le codificăm. Aceste funcții sunt apoi chemate pentru a îndeplini diferite sarcini.

În exemplul de mai sus, am apelat funcția de intrare pentru a primi intrarea utilizatorului, apoi am apelat funcția int pentru a converti șirul de intrare într-un număr întreg și, în sfârșit, am apelat funcția de tipărire pentru a afișa unele rezultate.

Cu toate acestea, pe măsură ce funcțiile își desfășoară acțiunile, acestea pot întâmpina erori pe care nu știu să le gestioneze. În acest caz, funcțiile menționate trebuie să înceteze să ruleze și să comunice că a fost întâlnită o eroare. Pentru a comunica, vor ridica excepții.

  Cum să încorporați fonturi în PowerPoint

Codul numit funcție este responsabil pentru ascultarea acestor excepții și pentru reacția adecvată. Dacă acest lucru nu se face, programul se va bloca după ce întâmpină erori, așa cum am văzut în exemplul anterior.

Prin urmare, excepțiile sunt în esență un mecanism de comunicare care permite unei funcții care a fost apelată să trimită un semnal de primejdie către codul care a apelat-o. Iar reacția la care sa făcut aluzie în mod corespunzător mai devreme este esența gestionării excepțiilor.

Diferite tipuri de excepții

Este important de știut că nu toate excepțiile sunt la fel. Există diferite tipuri de excepții ridicate pentru diferite erori întâlnite. De exemplu, dacă încercați să împărțiți un număr la zero, apare o eroare ZeroDivisionError. Și o TypeError apare atunci când încercați o operațiune cu un tip de date nevalid. Iată o listă completă a tipuri de excepții.

Cum să gestionați excepțiile

După cum am explicat mai devreme, excepțiile sunt semnalele de primejdie făcute de funcțiile pe care le numim. Prin urmare, codul nostru ar trebui să asculte aceste semnale de primejdie și să reacționeze în mod corespunzător atunci când sunt auzite. Pentru a gestiona excepțiile în mod corespunzător, folosim constructele Python Try Except. Structura de bază a construcției este următoarea:

try:
    # Code to try and run
except:
    # Code to run if an exception is raised
finally:
    # Code to run in the end, whether or not an exception is raised

După cum puteți vedea, constructul este alcătuit din trei cuvinte cheie care sunt explicate mai jos:

încerca

Cuvântul cheie try marchează începutul unui construct Python Try Except. În plus, marchează un bloc de cod care ar putea ridica o excepție. Este o instrucțiune pentru interpretul Python pentru a încerca să ruleze cod în bloc. Dacă se ridică o excepție, programul se oprește imediat și sare pentru a executa codul scris în blocul except.

cu exceptia

Cuvântul cheie except marchează blocul de cod care va fi executat dacă se ridică o excepție în timpul executării blocului try. Puteți defini mai multe blocuri except pentru diferite tipuri de excepții care ar putea fi ridicate. Acest lucru va fi ilustrat mai târziu.

in cele din urma

Cuvântul cheie final este al treilea și ultimul cuvânt cheie folosit în Python Try Except. Acesta marchează un bloc de cod care va fi executat indiferent dacă este ridicată sau nu o excepție.

  Cum să scapi de săgeata goală pe iPhone

Un exemplu

Iată un exemplu despre modul în care cuvintele cheie de mai sus pot gestiona o excepție. Vom modifica exemplul anterior la acesta.

try:
    user_input = input("Enter a number: ")
    num = int(user_input)
    print("Your number doubled is:", num * 2)
except:
    print("Something went wrong")
finally:
    print("This code will be executed no matter what")

Dacă rulați codul de mai sus cu 5, o intrare validă, ca intrare, veți obține următoarele:

Și dacă îl rulați cu „hello” ca intrare, veți obține următoarele:

Deci, când nu a fost ridicată nicio excepție în timpul executării codului în blocul try, computerul a trecut la blocul final. Cu toate acestea, când a fost ridicată o excepție în timpul executării codului în blocul try, computerul a trecut la blocul except și apoi în blocul final.

De asemenea, puteți gestiona excepții pentru anumite tipuri de erori. De exemplu, dacă doriți să gestionați excepțiile ValueError și KeyboardInterrupt într-un mod specific, puteți modifica codul de mai sus astfel:

try:
    user_input = input("Enter a number: ")
    num = int(user_input)
    print("Your number doubled is:", num * 2)
except ValueError:
    print("Value can't be converted to int")
except KeyboardInterrupt:
    print("Received a keyboard interrupt")
except:
    print("Catch-all exception block")
finally:
    print("This code will be executed no matter what")

În codul de mai sus, avem 3, cu excepția blocurilor. Primul bloc exceptează numai excepțiile ValueError, în timp ce al doilea prinde doar excepțiile KeyboardInterrupt. Ultimul bloc except nu are asociat un tip de excepție de ascultat. Ca urmare, prinde restul excepțiilor neprinse de primele două blocuri.

Rulând codul de mai sus, ar trebui să obțineți o ieșire similară cu aceasta:

Când se ridică o excepție, puteți obține mai multe informații despre excepție în obiectul excepție. Pentru a obține acces la obiectul excepție, utilizați cuvântul cheie as. Se folosește după cum urmează:

try:
    user_input = input("Enter a number: ")
    num = int(user_input)
    print("Your number doubled is:", num * 2)
except ValueError as e:
    print("Value Error:", e)
except KeyboardInterrupt as e:
    print("Keyboard Interrupt:", e)
except Exception as e:
    print("Some other exception", e)

Cum să ridicați excepții

Până acum ne-am confruntat cu excepții ridicate de alte funcții. Cu toate acestea, este, de asemenea, posibil să ridicați excepții în codul dvs. Pentru a ridica o excepție, folosim cuvântul cheie raise. De asemenea, specificăm o clasă care reprezintă tipul de excepție pe care vrem să o ridicăm și mesajul care poate fi citit de om asociat excepției.

  Cum va funcționa noul „Porn Block” de internet din Marea Britanie

Folosim clasa Exception în exemplul următor pentru a ridica o excepție generică. Apoi, transmitem mesajul constructorului clasei.

raise Exception('Something went wrong')

Dacă rulați fragmentul de mai sus ca program, veți obține rezultate similare cu aceasta:

De asemenea, puteți specifica diferite tipuri de excepții. De exemplu, puteți ridica o excepție TypeError atunci când o valoare are tipul de date greșit:

def double(x):
    if isinstance(x, int):
        return x * 2
    else
        raise TypeError('x should be an int')

Sau dacă valoarea specificată este în afara limitelor acceptabile, puteți genera o valoare ValueError:

def say_hello(name):
    if name == '':
        raise ValueError('Value outside bounds')
    else:
        print('Hello', name)

De asemenea, puteți crea tipurile de excepții prin subclasarea clasei Exception. Iată un exemplu:

class InvalidHTTPMethod(Exception):
    pass

În exemplul de mai sus, am creat o clasă InvalidHTTPMethod, care moștenește din clasa Exception. Îl putem folosi în același mod ca înainte pentru a ridica excepții:

raise InvalidHTTPMethod('Must be GET or POST')

Cazuri de utilizare obișnuite pentru gestionarea excepțiilor

Gestionarea excepțiilor este utilizată într-o mulțime de scenarii. Exemplul anterior a arătat cum poate gestiona excepțiile datorate introducerii utilizatorului. Această secțiune va acoperi două situații suplimentare în care gestionarea excepțiilor este utilă. Acestea sunt gestionarea excepțiilor ca urmare a solicitărilor de rețea eșuate și gestionarea excepțiilor în timpul citirii fișierelor.

Efectuarea cererilor de rețea

În exemplul de mai jos, facem o solicitare către Google. Ascultăm excepții pentru a le gestiona. Aceste excepții sunt definite în obiectul requests.exceptions.

import requests

try:
    response = requests.get("https://google.com")

    # Check if the response status code is in the 200-299 range (successful response)
    if 200 <= response.status_code < 300:
        print("Request was successful!")
    else:
        print(f"Request failed with status code: {response.status_code}")
except requests.exceptions.RequestException as e:
    print(f"RequestException occurred: {e}")
except requests.exceptions.ConnectionError as e:
    print(f"ConnectionError occurred: {e}")
except requests.exceptions.Timeout as e:
    print(f"Timeout occurred: {e}")
except requests.exceptions.TooManyRedirects as e:
    print(f"TooManyRedirects occurred: {e}")
except requests.exceptions.HTTPError as e:
    print(f"HTTPError occurred: {e}")
except Exception as e:
    print(f"An unexpected error occurred: {e}")

Citirea datelor dintr-un fișier

În acest ultim exemplu, citim date din fișierul hello.txt. De asemenea, gestionăm excepții comune care pot fi ridicate, cum ar fi eroarea FileNotFound și IOError.

try:
    with open(file_path, 'r') as file:
        data = file.read()
        print("File contents:")
        print(data)
except FileNotFoundError as e:
    print(f"FileNotFoundError occurred: {e}")
except IOError as e:
    print(f"IOError occurred: {e}")
except Exception as e:
    print(f"An unexpected error occurred: {e}")

Concluzie

Acest articol a explorat ce excepții au fost și de ce au fost ridicate. De asemenea, am stabilit că le gestionăm pentru a face codul mai fiabil și pentru a preveni blocarea. În cele din urmă, am abordat cum să gestionăm excepțiile, precum și cum să ridicăm unele excepții.

Apoi, verificați tipurile comune de erori Python și cum să le rezolvați.