iniziare a programmare

Lemon Tree lemontree75 at gmail.com
Sat Oct 21 11:38:48 EDT 2006


Enrico 'Mc Osten' Franchi ha scritto:

> Lemon Tree <lemontree75 at gmail.com> wrote:
>
> > Non per programmini stupidi.
> > E poi magari ti manca proprio il test che va a coprire una certa parte
> > che, guarda caso...
>
> Allora c'è un problema di sviluppo. I test si scrivono *sempre* e
> comunque. In Python quanto in Java.
>
Allora :)
Tralasciamo tutto il discorso sull'ingegneria del software, test etc.
che io condivido in pieno...
Il mio problema era semplicemente didattico e di ricerca
dell'informazione.

Ho applicato un approccio empirico per vedere cosa riuscivo a tirare
fuori da python.
Premessa: non sono un newbie sulla programmazione perche' so
programmare in Java, C, C++ e conosco bene i concetti su cui questi
linguaggi poggiano. Premessa 2: Mai visto python in vita mia.

Ora do una scorsa alle funzioni dei vari moduli e scopro *a caso* e per
prima questa funzione os.open che mi fa aprire il file (tralasciamo che
non e' il modo piu' conveniente, etc. etc. Fa quello che voglio fare e
mi sta bene per ora)

La documentazione dice:

os.open = open(...)
    open(filename, flag [, mode=0777]) -> fd
    Open a file (for low level IO).

Scrivo un programma semplicissimo:

fd = os.open("pippo")
os.close(fd)

Lo lancio e... BOOM. Eccezione. Pippo non esiste.

Chiaramente so per esperienza che esiste un meccanismo che consente di
controllare eventuali errori.
Peccato che ne esistono piu' di uno. Ad esempio, un modo potrebbe
essere anche quello di ritornare un fd nullo o negativo. Questo nella
documentazione non e' scritto.

Inoltre l'eccezione che viene sollevata neanche lei e' scritta nella
documentazione di os.open

Quindi a questo punto mi ritrovo con una funzione os.open che so per
esperienza che puo' fallire ma
1) Non so che tipo di meccanismo usa per comunicare il fallimento
2) Dopo averla testata so che genera un'eccezione. Ma questo non basta
perche' ne potrebbe generare piu' di una, magari per diversi tipi di
errori. E questo non lo posso neanche comprendere con i test (anche se
trovo che sarebbe assurdo fare test per scoprire di cosa puo' fallire
una funzione! Dovrebbe essere esplicito)

Quindi alla domanda: cosa scrivo nelle clausole except del blocco in
cui si trova os.open?
Non so dare risposta guardando alla documentazione di os.open.
E questo, IMHO, e` deleterio.

> Ma i manuali sono li per tenere su i tavolini o cosa?
> Sul Nutshell per esempio ci sono tutte le eccezioni standard, la loro
> gerarchia e quello che fanno.
 >
> Lista di eccezioni standard:
> <http://docs.python.org/lib/module-exceptions.html>
>
Questa e` una lista della gerarchia delle eccezioni.
Nulla dice di *quali funzioni* generano *quali eccezioni*
Ci faccio ben poco se voglio rispondere ripondere alla domanda: "Quali
eccezioni cono sollevate dal metodo M"? Qualsiasi sia M.

> Mi sembra che ti stai attancando ad un dettaglio abbastanza
> trascurabile. In primo luogo come sai dove andare a cercare le funzioni,
> ti ho insegnato dove andare a cercare le eccezioni (ma lo avresti potuto
> avere da solo).
>
Quello che hai segnalato non serve per rispondere alle domande che mi
sono posto.

> Poi chiaro che a sboccio più informazione è meglio di meno informazione.
> A meno che non ci siano altri motivi che non mi vengono in mente.
>
Guarda io sono abituato ad i javadoc dove per ogni metodo c'e`

Descrizione dei parametri
Descrizione dei valori di ritorno
Descrizione delle eccezioni eventualmente generate.

Questo da un'informazione completa. Infatti se avessi trovato la
documentazione di os.open scritta in questo modo, lo avrei wrappato
subito con un try except OSError.

> Comunque faccio un follow-up su iclp. È un ambiente molto amichevole che
> ti consiglio di sottoscrivere. Inoltre è il posto giusto per molte delle
> domande che quando qualcuno inizia generalmente fa.
> 
Eccomi qui :)

Ciao




More information about the Python-list mailing list