ePrometeusCorsoLinuxLinux
testi articoli
Testi Articoli  Download
Home | Espressioni | Comandi | Funzioni | Moduli | Classi | 
CorsoJava è ora Video! Free for all!
Clicca Qui!
Corso Python
Python: Moduli ed Eccezioni
Moduli
Estendere il path
Packages
Eccezioni
Catturare Eccezioni
Gestione eccezioni:
Approfondimento


<<< Eccezioni >>>

Consideriamo adesso uno dei problemi più importante che si ha normalmente quando si cerca di sviluppare codice "robusto". Ovvero codice che gestisce varie condizioni di errore, che non si "impalla" se succedono varie piacevolezze impreviste, ma che invece riesce in qualche modo a gestire e contenere la "deflagrazione" di queste situazioni.

Spesso i programmi funzionano perfettamente in condizioni "normali", ma se succede qualcosa di non molto consueto ma sempre possibile (disco pieno, interruzione di connessione di rete etc), possiamo incorrere in comportamenti assolutamente imprevisti e spiacevoli.

Il modo normale di ovviare sarebbe quello di controllare una per una le condizioni di ritorno dalle chiamate per verificare se ci sono errori. Ma sarebbe estremamente dispendiosa in termini di codifica: praticamente ad ogni passo si dovrebbero controllare gli errori. Un tedio infinito anche per il programmatore più meticoloso.

Per fortuna è possibile ovviare, e ridurre la quantità di situazioni impreviste gestibili, tramite un meccanismo a "rete di sicurezza", detto "gestione di eccezioni". Senza questo meccanismo, si dovrebbero considerare tutti i possibili casi di errore. In effetti, è la mancata gestione dei casi di errore che rende in molti casi i programmi instabili.

Python, come molti altri linguaggi di programmazione, gestisce gli errori distinguendoli dai normali valori ritornati dalle funzioni. In caso di errore viene sollevata una eccezione, che obbliga necessariamente il programmatore a prendere misure speciali per gestirli. Vediamo un caso specifico:

>>> 1/0
Traceback (most recent call last):
  File "<interactive input>", line 1, in ?
ZeroDivisionError: integer division or modulo by zero

In questo caso abbiamo fatto una divisione per zero. La reazione del sistema è quella di sollevare una eccezione, che nel caso dell'interprete riga di comando viene semplicemente stampata a video.

Le eccezioni sono organizzate gerarchicamente. Possiamo avere una eccezione per esempio "errore aritmetico" (ArithmeticError) generica, che può specializzarsi in una eccezione "divisione per zero" (ZeroDivisionError) o "errore di overflow" (OverflowError). In entrambi i casi queste due eccezioni sono ancora "errore aritmetici". In realtà la gerarchia delle eccezioni viene realizzata utilizzando la programmazione ad oggetti, che definisce appunto una gerarchia di classi. Le classi saranno trattate in dettaglio in seguito.

ePrometeus s.r.l. - Web Software House & Open Source System Integrator
MILANO - SAN BENEDETTO DEL TRONTO(AP)
Contatti: info@eprometeus.com