[Python] Sulla gestione degli errori

Daniele Varrazzo piro a develer.com
Mer 12 Gen 2011 19:11:11 CET


On Wed, 12 Jan 2011 17:59:43 +0100, "Vittorio Zuccala'"
<vittorio.zuccala a gmail.com> wrote:
> Salve a tutti,
> dopo qualche mese di programmazione in python mi sto cimentando sulla
> gestione delle eccezioni nella scrittura di un modulo.
> Vi scrivo perchè vorrei un parere di "stile"...
> 
> Dato che il mio modulo "csr" è piuttosto affollato, ho pensato di creare
> un
> file delle sole eccezioni a parte (ha un senso come scelta?).

Se un modulo e' affollato devi fare un package, non ha senso avere solo un
modulo di eccezioni, "sibling" del modulo che lo usa. Gestire due moduli
fianco a fianco e' piu' difficile che gestire un package.

Per me ha senso avere un modulo di errori in un package un po' piu' che
banale ma non ha senso creare un modulo di errori da riciclare per diversi
script: la definizione delle eccezioni e' piccola, c'e' poco codice da
duplicare; invece l'accoppiamento tra modulo di errori e chi lo usa e'
massimo, quindi modificarlo diventa un campo minato.

Fai attenzione a importare il modulo sempre con il percorso assoluto
pero', perche' se da qualche parte usi import assoluti:

    from miopackage import errori

e in un modulo dentro miopackage usi un import relativo:

    import errori

rischi di importare il modulo due volte distinte, col risultato di avere
le classi di errore duplicate e un "except ErroreValore" finirebbe col
funzionare misteriosamente a volte si e a volte no.


> from csrErrori import *

Mi sembra tu voglia usare un modulo esterno allo script. Come detto questo
secondo me crea problemi. Se usi un modulo interno puoi evitare il prefisso
e col nome piu' corto non ti viene la tentazione di usare *

    from csr import errori
    raise errori.ErroreValore('pippo')

> class elaboraInformazioni(object):
>     """Classe di prova"""
>     def __init__(self):
>         try:
>             raise ErroreValore("pippo")
>         except ErroreValore,ex:
>             print "Errore " + ex.valore
>         pass
> 
> L'output è quello che mi aspetto:  Errore pippo
> E' corretta come impostazione?

Qui si', la cosa piu' delicata e' imparare quando usare eccezioni
"personali" e *perche'* usarle. Usarle solo perche' hai scoperto una
feature fica e la vuoi usare a tutti i costi e' solo parzialmente ok :)

Qui avevo scritto ad un tizio un esempio di uso delle eccezioni custom,
che e' il modo in cui mi regolo di solito:
http://stackoverflow.com/questions/497952/how-to-make-python-gracefully-fail/498038#498038


> L'idea è quella di creare questo file delle eccezioni (csrErrori) da
> implementare di volte in volta per l'azienda dove vado a pescare i vari
> errori che mi servono.

Come detto mi aspetto che questo ti creera' piu' problemi che vantaggi.


-- 
Daniele Varrazzo - Develer S.r.l. 
http://www.develer.com


Maggiori informazioni sulla lista Python