Enrico 'Mc Osten' Franchi ha scritto: > Lemon Tree <[EMAIL PROTECTED]> 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 -- http://mail.python.org/mailman/listinfo/python-list