Fino ad ora abbiamo esplorato Python di base dal Set 1 al 4 ( Insieme 1 | Insieme 2 | Insieme 3 | Insieme 4 ).
In questo articolo discuteremo come gestire le eccezioni in Python utilizzando le istruzioni try, tranne e infine con l'aiuto di esempi appropriati.
L'errore in Python può essere di due tipi, ad es. Errori di sintassi ed eccezioni . Gli errori sono problemi in un programma a causa dei quali il programma ne interrompe l'esecuzione. D'altra parte, vengono sollevate eccezioni quando si verificano alcuni eventi interni che modificano il normale flusso del programma.
Diversi tipi di eccezioni in Python:
In Python, ci sono diverse eccezioni Python integrate che possono essere sollevate quando si verifica un errore durante l'esecuzione di un programma. Ecco alcuni dei tipi più comuni di eccezioni in Python:
- Errore di sintassi: Questa eccezione viene sollevata quando l'interprete rileva un errore di sintassi nel codice, come una parola chiave errata, due punti mancanti o una parentesi sbilanciata.
- TypeError : questa eccezione viene sollevata quando un'operazione o una funzione viene applicata a un oggetto del tipo sbagliato, come l'aggiunta di una stringa a un numero intero.
- NomeErrore : questa eccezione viene sollevata quando un nome di variabile o funzione non viene trovato nell'ambito corrente.
- Errore indice : questa eccezione viene sollevata quando un indice non rientra nell'intervallo per una lista, una tupla o altri tipi di sequenza.
- Errore chiave : questa eccezione viene sollevata quando una chiave non viene trovata in un dizionario.
- ValoreErrore : questa eccezione viene sollevata quando una funzione o un metodo viene chiamato con un argomento o input non valido, come nel tentativo di convertire una stringa in un numero intero quando la stringa non rappresenta un numero intero valido.
- Errore attributo : questa eccezione viene sollevata quando un attributo o metodo non viene trovato su un oggetto, come nel tentativo di accedere a un attributo inesistente di un'istanza di classe.
- IOError : questa eccezione viene sollevata quando un'operazione di I/O, come la lettura o la scrittura di un file, fallisce a causa di un errore di input/output.
- Errore di divisione zero : Questa eccezione viene sollevata quando si tenta di dividere un numero per zero.
- Errore di importazione : questa eccezione viene sollevata quando un'istruzione import non riesce a trovare o caricare un modulo.
Questi sono solo alcuni esempi dei molti tipi di eccezioni che possono verificarsi in Python. È importante gestire correttamente le eccezioni nel codice utilizzando blocchi try-eccetto o altre tecniche di gestione degli errori, al fine di gestire con garbo gli errori ed evitare che il programma si blocchi.
Differenza tra errore di sintassi ed eccezioni
Errore di sintassi: Come suggerisce il nome, questo errore è causato dalla sintassi errata nel codice. Porta alla conclusione del programma.
Esempio:
C'è un errore di sintassi nel codice. IL ' if'> l'istruzione deve essere seguita da due punti (:>), e il ' print'> l'istruzione dovrebbe essere rientrata per essere all'interno di ' if'> bloccare.
Python3
amount>=> 10000> if>(amount>>2999>)> print>(>'You are eligible to purchase Dsa Self Paced'>)> |
>
>
Produzione:

Eccezioni: Vengono sollevate eccezioni quando il programma è sintatticamente corretto, ma il codice genera un errore. Questo errore non interrompe l'esecuzione del programma, tuttavia ne modifica il normale flusso.
Esempio:
Qui in questo codice stiamo dividendo il 'segni' da zero, quindi si verificherà un errore noto come 'Errore di divisione zero'
Python3
marks>=> 10000> a>=> marks>/> 0> print>(a)> |
>
>
Produzione:

Nell'esempio sopra viene generato ZeroDivisionError mentre stiamo provando a dividere un numero per 0.
Nota: L'eccezione è la classe base per tutte le eccezioni in Python. Puoi controllare la gerarchia delle eccezioni Qui .
Esempio:
1) TypeError: questa eccezione viene sollevata quando un'operazione o una funzione viene applicata a un oggetto del tipo sbagliato. Ecco un esempio:
Qui a 'Erroretipo' viene sollevato poiché entrambi i tipi di dati che vengono aggiunti sono diversi.
Python3
confronto di stringhe C#
x>=> 5> y>=> 'hello'> z>=> x>+> y> |
>
>
output: Traceback (most recent call last): File '7edfa469-9a3c-4e4d-98f3-5544e60bff4e.py', line 4, in z = x + y TypeError: unsupported operand type(s) for +: 'int' and 'str'>
prova catch block per risolverlo:
Il codice tenta di aggiungere un numero intero ( ' x'> ) e una stringa ( ' y'> ) insieme, che non è un'operazione valida, e genererà a ' TypeError'> . Il codice utilizzava a ' try'> E ' except'> block per intercettare questa eccezione e stampare un messaggio di errore.
Python3
x>=> 5> y>=> 'hello'> try>:> >z>=> x>+> y> except> TypeError:> >print>(>'Error: cannot add an int and a str'>)> |
>
>Produzione
Error: cannot add an int and a str>
Dichiarazione Try and Except: rilevamento delle eccezioni
Le istruzioni try ed tranne vengono utilizzate per catturare e gestire le eccezioni in Python. Le istruzioni che possono sollevare eccezioni vengono mantenute all'interno della clausola try e le istruzioni che gestiscono l'eccezione vengono scritte all'interno della clausola tranne.
Esempio: Qui stiamo provando ad accedere all'elemento dell'array il cui indice è fuori limite e a gestire l'eccezione corrispondente.
Python3
a>=> [>1>,>2>,>3>]> try>:> >print> (>'Second element = %d'> %>(a[>1>]))> >print> (>'Fourth element = %d'> %>(a[>3>]))> except>:> >print> (>'An error occurred'>)> |
>
>Produzione
Second element = 2 An error occurred>
Nell'esempio precedente, le istruzioni che possono causare l'errore sono inserite nell'istruzione try (la seconda istruzione print nel nostro caso). La seconda istruzione print tenta di accedere al quarto elemento dell'elenco che non è presente e ciò genera un'eccezione. Questa eccezione viene quindi catturata dall'istruzione eccetto.
Rilevamento di eccezioni specifiche
Un'istruzione try può avere più di una clausola tranne, per specificare gestori per eccezioni diverse. Tieni presente che verrà eseguito al massimo un gestore. Ad esempio, possiamo aggiungere IndexError nel codice sopra. La sintassi generale per aggiungere eccezioni specifiche è:
try: # statement(s) except IndexError: # statement(s) except ValueError: # statement(s)>
Esempio: Catturare eccezioni specifiche in Python
il miglior hentai
Il codice definisce una funzione ' fun(a)'> quello calcolab>in base all'inputa>. Sea>è inferiore a 4, tenta una divisione per zero, causando a ' ZeroDivisionError'> . Il codice chiamafun(3)>Efun(5)>all'interno di un blocco try-eccetto. Gestisce ilZeroDivisionError>perfun(3)>e stampe Errore ZeroDivisionErrore verificato e gestito. IL ' NameError'> il blocco non viene eseguito poiché non esistono ' NameError'> eccezioni nel codice.
Python3
def> fun(a):> >if> a <>4>:> >b>=> a>/>(a>->3>)> >print>(>'Value of b = '>, b)> > try>:> >fun(>3>)> >fun(>5>)> except> ZeroDivisionError:> >print>(>'ZeroDivisionError Occurred and Handled'>)> except> NameError:> >print>(>'NameError Occurred and Handled'>)> |
>
>Produzione
ZeroDivisionError Occurred and Handled>
Se commenti la riga fun(3), l'output sarà
NameError Occurred and Handled>
L'output sopra è così perché non appena Python tenta di accedere al valore di b, si verifica NameError.
Prova con la clausola Else
In Python puoi anche usare la clausola else sul blocco try-eccetto che deve essere presente dopo tutte le clausole tranne. Il codice entra nel blocco else solo se la clausola try non solleva un'eccezione.
Prova con la clausola else
Il codice definisce una funzione AbyB(a, b)> quello calcolac>come ((a+b) / (a-b)) e gestisce un potenzialeZeroDivisionError>. Stampa il risultato se non c'è errore di divisione per zero. Chiamando AbyB(2.0, 3.0)> calcola e stampa-5.0>, mentre chiama AbyB(3.0, 3.0)> tenta di dividere per zero, ottenendo a ZeroDivisionError> , che viene catturato e a/b dà come risultato 0 viene stampato.
Python3
def> AbyB(a , b):> >try>:> >c>=> ((a>+>b)>/> (a>->b))> >except> ZeroDivisionError:> >print> (>'a/b result in 0'>)> >else>:> >print> (c)> AbyB(>2.0>,>3.0>)> AbyB(>3.0>,>3.0>)> |
>
>
sottolineatura del ribasso
Produzione:
-5.0 a/b result in 0>
Finalmente parola chiave in Python
Python fornisce una parola chiave Finalmente , che viene sempre eseguito dopo i blocchi try ed eccetto. Il blocco finale viene sempre eseguito dopo la normale conclusione del blocco try o dopo che il blocco try termina a causa di qualche eccezione.
Sintassi:
try: # Some Code.... except: # optional block # Handling of exception (if required) else: # execute if no exception finally: # Some code .....(always executed)>
Esempio:
Il codice tenta di eseguire una divisione intera per zero, ottenendo come risultato a ZeroDivisionError> . Cattura l'eccezione e stampa Impossibile dividere per zero. Indipendentemente dall'eccezione, ilfinally>il blocco viene eseguito e stampato Questo viene sempre eseguito.
Python3
try>:> >k>=> 5>/>/>0> >print>(k)> except> ZeroDivisionError:> >print>(>'Can't divide by zero'>)> finally>:> >print>(>'This is always executed'>)> |
>
>
Produzione:
Can't divide by zero This is always executed>
Sollevamento dell'eccezione
IL sollevare la dichiarazione consente al programmatore di forzare il verificarsi di un'eccezione specifica. L'unico argomento in raise indica l'eccezione da sollevare. Deve essere un'istanza di eccezione o una classe di eccezione (una classe che deriva da Exception).
Questo codice solleva intenzionalmente aNameError>con il messaggio Ciao usando ilraise>dichiarazione all'interno di atry>bloccare. Quindi, cattura ilNameError>eccezione, stampe Un'eccezione, e solleva nuovamente la stessa eccezione utilizzandoraise>. Ciò dimostra come le eccezioni possono essere sollevate e gestite in Python, consentendo messaggi di errore personalizzati e un'ulteriore propagazione delle eccezioni.
Python3
try>:> >raise> NameError(>'Hi there'>)> except> NameError:> >print> (>'An exception'>)> >raise> |
>
>
L'output del codice precedente verrà semplicemente stampato come un'eccezione, ma nell'ultima riga si verificherà anche un errore di runtime a causa dell'istruzione raise nell'ultima riga. Quindi, l'output sulla riga di comando sarà simile a:
Traceback (most recent call last): File '/home/d6ec14ca595b97bff8d8034bbf212a9f.py', line 5, in raise NameError('Hi there') # Raise Error NameError: Hi there> Vantaggi della gestione delle eccezioni:
- Maggiore affidabilità del programma : gestendo correttamente le eccezioni, puoi evitare che il tuo programma si blocchi o produca risultati errati a causa di errori o input imprevisti.
- Gestione degli errori semplificata : La gestione delle eccezioni consente di separare il codice di gestione degli errori dalla logica principale del programma, semplificando la lettura e la manutenzione del codice.
- Codice più pulito: Con la gestione delle eccezioni, puoi evitare di utilizzare istruzioni condizionali complesse per verificare la presenza di errori, ottenendo un codice più pulito e leggibile.
- Debug più semplice : Quando viene sollevata un'eccezione, l'interprete Python stampa un traceback che mostra la posizione esatta in cui si è verificata l'eccezione, semplificando il debug del codice.
Svantaggi della gestione delle eccezioni:
- Spese generali delle prestazioni: La gestione delle eccezioni può essere più lenta rispetto all'utilizzo di istruzioni condizionali per verificare la presenza di errori, poiché l'interprete deve eseguire un lavoro aggiuntivo per intercettare e gestire l'eccezione.
- Maggiore complessità del codice : la gestione delle eccezioni può rendere il codice più complesso, soprattutto se è necessario gestire più tipi di eccezioni o implementare una complessa logica di gestione degli errori.
- Possibili rischi per la sicurezza: Le eccezioni gestite in modo improprio possono potenzialmente rivelare informazioni sensibili o creare vulnerabilità di sicurezza nel codice, quindi è importante gestire le eccezioni con attenzione ed evitare di esporre troppe informazioni sul programma.
Nel complesso, i vantaggi della gestione delle eccezioni in Python superano gli svantaggi, ma è importante utilizzarlo con giudizio e attenzione per mantenere la qualità del codice e l’affidabilità del programma.
Questo articolo è stato contribuito da Nikhil Kumar Singh (nickzuck_007)