Come gestire le eccezioni in Python

Come gestire le eccezioni in Python

La gestione delle eccezioni è la tua capacità di personalizzare e visualizzare i messaggi di errore per le parti del tuo programma che non funzionano.





Sia che tu stia costruendo un sito web, creando un'API, un modulo o qualsiasi altro prodotto utilizzando Python, la tua capacità di gestire efficacemente le eccezioni ti consente di indicare esplicitamente la causa di un errore.





Qui daremo un'occhiata a come puoi gestire le eccezioni in Python.





Come funziona la gestione delle eccezioni in Python

Quando sollevi eccezioni, stai dicendo a Python di far apparire un messaggio ogni volta che un blocco di codice fallisce. La gestione delle eccezioni è come dire a qualcuno di provare a sollevare un peso. E se non possono, dovrebbero avvisarti.

Per sollevare un'eccezione in Python, tuttavia, dirai a Python di provare ad eseguire un particolare blocco di codice. Se quel blocco fallisce, puoi chiedere a Python di sollevare un'eccezione definita al codice fallito.



Quando dovresti usare le eccezioni nella programmazione Python?

Nella maggior parte delle occasioni, puoi mascherare gli errori standard di Python usando le eccezioni. Ma è necessario rimanere vigili, poiché ciò potrebbe causare problemi di debug. Di conseguenza, potresti trovare difficile capire la causa principale di un eventuale bug.

Pertanto, dovresti usare le eccezioni quando hai sufficientemente testato il tuo codice e sei sicuro che funzioni. In definitiva, è buona norma usarli per gestire potenziali errori che possono derivare dall'estremità dell'utente piuttosto che dal codice stesso.





In altre parole, puoi utilizzare le eccezioni come strumento di avviso per guidare gli utenti su come utilizzare il tuo programma.

Gestire le eccezioni Python

Per gestire le eccezioni in Python, devi prima avvolgere il tuo codice in a prova...tranne bloccare. Occasionalmente, potrebbe essere necessario includere a finalmente dichiarazione per gestire ulteriori azioni, a seconda delle vostre esigenze.





Il concetto di codifica delle eccezioni Python generalmente assomiglia a questo:

try:
'code to be executed'
except:
'error message'

Come accennato in precedenza, puoi anche usare finalmente in un blocco di eccezione. Ma il codice che scrivi dentro a finalmente La clausola è indipendente e viene eseguita indipendentemente dal fatto che ci sia un'eccezione o meno.

In sostanza, è utile se si dispone di un altro blocco di codice che si desidera eseguire continuamente indipendentemente da ciò che accade all'interno del prova...tranne bloccare.

Ecco un esempio:

try:
print(9+6)
except:
print('error message')
finally:
print('please restart')
Output:
15
please restart

Nel codice sopra, per favore riavvia viene eseguito continuamente, indipendentemente dal fatto che ci sia o meno un'eccezione.

Un altro la condizione può anche seguire an tranne dichiarazione:

try:
C = 2 + B
except:
print('B needs to be defined')
else:
print(u'Added successfully! The result is %s'%(C))
Output: B needs to be defined

Ora riprova con 'B' definito:

try:
B = 5
C = 2 + B
except:
print('B needs to be defined')
else:
print(u'Added successfully! The result is %s'%(C))
Output: Added successfully! The result is 7

Gli esempi precedenti sono eccezioni non standardizzate. Ma puoi avere un'eccezione più esplicita quando combini eccezioni integrate (definite) con quelle non standardizzate:

try:
C = 2 + B
except NameError as err:
print(err, ':', 'B needs to be defined, please')
else:
print(u'Added successfully! The result is %s'%(C))
Output: name 'B' is not defined : B needs to be defined, please

L'eccezione di cui sopra controlla prima se c'è un NomeErrore nel Tentativo bloccare. Quindi stampa lo standard NomeErrore prima eccezione (' il nome 'B' non è definito'). E lo supporta con la tua eccezione scritta ('B deve essere definito, per favore').

Correlati: Principi di programmazione di base che ogni programmatore deve conoscere

Windows non è stato in grado di rilevare automaticamente il proxy

E se vuoi gestire una catena di eccezioni, puoi anche accompagnare a Tentativo blocco con molti tranne dichiarazioni. Questo è abbastanza utile se il tuo Tentativo block ha il potenziale per avere molte eccezioni:

try:
B = 5
C = 2 + B
D = float(6)
F = 7/0
except NameError as err:
print(err,':', 'B needs to be defined, please')
except ValueError as val:
print(val,':', 'You can't convert that data')
except ZeroDivisionError as zeroerr:
print(zeroerr,':', 'You can't divide a number by zero')
else:
print(u'Operation successfull! The results are: %s, %s, and %s'%(C, D, F))
Output: division by zero : You can't divide a number by zero

E se la divisione è valida? Ad esempio, sostituendo F = 7/0 nel codice sopra con F = 7/5 dà:

Output: Operation successfull! The results are: 7, 6.0, and 1.4

Eccezioni definite dall'utente in Python

Puoi anche trovare la tua eccezione e chiamarla più avanti nel tuo programma. Ciò ti consente di fornire una descrizione specifica della tua eccezione e di nominarla come preferisci.

Tuttavia, ogni eccezione definita dall'utente (direttamente o indirettamente) proviene ancora dal built-in Eccezione classe di Python.

Il codice di esempio sotto fa riferimento alla base Eccezione direttamente chiamando Errore di runtime da:

class connectionError(RuntimeError):
def __init__(self, value):
self.value = value
try:
raise connectionError('Bad hostname')
except connectionError as err:
print(err.value)
Output: Bad hostname

Notare che errore di connessione , in questo caso, è una classe definita dall'utente, che puoi aumentare ogni volta che ne hai bisogno nel tuo programma.

Imparentato: La guida per principianti alle espressioni regolari con Python

È possibile creare un'eccezione definita dall'utente derivandola direttamente da Eccezione classe base. L'eccezione seguente, tuttavia, impedisce la sottrazione di 5 da 6 e chiama direttamente l'eccezione dalla classe base:

class errors(Exception):
pass
class sixFiveError(errors):
def __init__(self, value, message):
self.value = value
self.message = message
try:
raise sixFiveError(6-5,'This substraction is not allowed')
except sixFiveError as e:
print('There was an error:', e.message)
Output: There was an error: This substraction is not allowed

In pratica, puoi utilizzare un'eccezione definita in precedenza chiamandola in un'altra funzione. Ad esempio, puoi creare un floatError che consente solo l'aggiunta di due float:

# First call the base exception classes:
class errors(Exception):
pass
# Next, derive your own exception from the base class:
class FloatError(errors):
def __init__(self, value, message):
self.value = value
self.message = message
# Create a function to add two floats:
def addTwoFloat(a, b):
if (type(a) and type(b)) != float:
raise FloatError(a+b,'Numbers must be float to add')
else:
print(a + b)
addTwoFloat(4, 7)
Output: __main__.FloatError: (11, 'Numbers must be float to add')

Perché ora hai definito a FloatError classe, Python lo solleva se provi ad aggiungere due letterali non float usando il addtwoFloat funzione.

Puoi stampare il FloatError class nello stesso file Python in cui l'hai creato per vedere cosa succede:

print(FloatError)
Output:

FloatError , tuttavia, non è un'eccezione Python incorporata. Puoi verificarlo chiamando FloatError in un altro nuovo file Python in cui non hai creato questa classe:

print(FloatError)
Output: NameError: name 'FloatError' is not defined

ottieni un NomeErrore perché Python non lo riconosce come eccezione standard.

Puoi provare ad autodefinire anche altre classi di errore per vedere come si comportano.

Rendi i tuoi programmi Python più intuitivi con le eccezioni

Ci sono molte eccezioni standard in Python. Ma puoi anche definire il tuo. Tuttavia, la facilità di utilizzo del programma dipende in una certa misura da come gestisce le varie eccezioni (definite dall'utente, non specifiche o standard).

Le eccezioni, tuttavia, ti consentono di stabilire come dovrebbe funzionare il tuo programma quando gli utenti interagiscono con loro. L'indicazione chiara e concisa della causa di un errore fornisce inoltre agli utenti un avvertimento su cosa stanno facendo di sbagliato e, a volte, li indirizza nella giusta direzione.

Condividere Condividere Tweet E-mail Come eseguire il debug del codice Python

Equipaggiati con il know-how per schiacciare ogni bug Python sul tuo cammino.

Leggi Avanti
Argomenti correlati
  • Programmazione
  • Pitone
  • Tutorial sulla programmazione
Circa l'autore Idisou Omisola(94 articoli pubblicati)

Idowu è appassionato di qualsiasi tecnologia intelligente e produttività. Nel tempo libero gioca con la programmazione e quando si annoia passa alla scacchiera, ma ama anche staccare ogni tanto dalla routine. La sua passione per mostrare alle persone la tecnologia moderna lo motiva a scrivere di più.

Altro da Idowu Omisola

Iscriviti alla nostra Newsletter

Iscriviti alla nostra newsletter per consigli tecnici, recensioni, ebook gratuiti e offerte esclusive!

Clicca qui per iscriverti