IniziaInizia gratis

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

Visualizza il corso

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:

  • try esegui 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))
Modifica ed esegui il codice