Catturare le eccezioni
Prima di iniziare a scrivere le tue eccezioni personalizzate, assicuriamoci che tu abbia solide basi sulla gestione delle eccezioni.
In questo esercizio ti viene fornita una funzione invert_at_index(x, ind) che accetta due argomenti, una lista x e un indice ind, e inverte l'elemento della lista a quell'indice. Ad esempio, invert_at_index([5,6,7], 1) restituisce 1/6, cioè 0.166666.
Prova a eseguire il codice così com'è ed esamina l'output nella console. In questa funzione ci sono due operazioni non sicure: primo, se l'elemento che stiamo cercando di invertire ha valore 0, il codice genererà un'eccezione ZeroDivisionError. Secondo, se l'indice passato alla funzione è fuori dall'intervallo della lista, il codice genererà un IndexError. In entrambi i casi, lo script verrà interrotto, cosa che potrebbe non essere desiderabile.
Questo esercizio fa parte del corso
Programmazione orientata agli oggetti in Python
Istruzioni dell'esercizio
Usa un pattern try - except - except (con due blocchi except) all'interno della funzione per intercettare e gestire due eccezioni come segue:
tryesegui il codice così com'è,- se si verifica
ZeroDivisionError, stampa"Cannot divide by zero!", - se si verifica
IndexError, stampa"Index out of range!"
Sai di aver fatto bene se il codice gira senza errori e l'output nella console è:
0.16666666666666666
Cannot divide by zero!
None
Index out of range!
None
Esercizio pratico interattivo
Prova a risolvere questo esercizio completando il codice di esempio.
# MODIFY the function to catch exceptions
def invert_at_index(x, ind):
return 1/x[ind]
a = [5,6,0,7]
# Works okay
print(invert_at_index(a, 1))
# Potential ZeroDivisionError
print(invert_at_index(a, 2))
# Potential IndexError
print(invert_at_index(a, 5))