Il giorno mer, 11/05/2016 alle 11.48 +0100, enrico franchi ha scritto: > > 2016-05-10 16:56 GMT+01:00 Pietro Battiston <m...@pietrobattiston.it>: > > Capisco. Beh, d'ora in poi lo utilizzerò solo come programmazione > > difensiva, ad esempio iniziando ogni mio listato con > > > > assert(__debug__) > > > Capisco la battuta, ma se e' non e' una battuta, spero di non dovere > mai usare il tuo codice, visto che non potrei farlo funzionare.
È una battuta! (la riga è perfettamente equivalente a "pass", quindi il tuo codice funzionerebbe tranquillamente ;-) ) > Oggettivamente non e' troppo sensato fare girare il codice in > produzione in modalita' debug, poi fai te. ;) Sì, d'accordo. Avrei ritenuto enormemente più sensato che "-O" non si comportasse così... ma alla luce dell'eredità del C capisco. Per quel che mi riguarda, tenderò ad evitare "assert" d'ora in poi. Per dire: che sarebbe successo a questo tizio: http://stackoverflow.com/questions/23778128/python-error-when-calling-f ourier-transform-code se quella particolare configurazione di valori gli fosse capitata solo una volta in produzione? Boh, e chi lo sa, con ogni probabilità il codice che segue l'assert fallito non è stato testato granché con parametri non conformi (certamente non dalla suite di testing di numpy, che gira in modalità debug), magari gli muore fulminato il gatto e non capisce nemmeno perché finché non fa rigirare in modalità debug con gli stessi dati di input... > Poi spesso si fa, figuriamoci. Ma non poterlo fare, potrebbe > risultare in problemi. > > E detto fra noi... ma veramente vogliamo usare assert come *controllo > di flusso*? > Guarda, se l'avessi chiesto a me dieci anni fa, nemmeno avrei mai sospettato che uno potesse utilizzare le eccezioni _in generale_ come *controllo di flusso*... > Cioe'... mi passi una lista vuota invece che una piena? > AssertionError. > Mi passi un intero invece di una stringa? AssertionError. > Una chiamata http mi torna 503? AssertionError. > > E poi chi lo debugga sto coso? > Sono più o meno d'accordo con la risposta di Luca, ma in più... a me il messaggio di errore "assert" sembrava proprio una meraviglia per il debugging... sostanzialmente mi piaceva condensare (esempio stupido) un if not civico.isdigit(): raise ValueError("Il numero civico deve essere numerico") in assert(civico.isdigit()) "Il numero civico deve essere numerico" senza perdere "capacità informativa". Ciò detto, OK, ora che ho capito il funzionamento di "-O" tutti questi sono ragionamenti puramente ipotetici, anche perché è chiaro che vista da questo punto di vista un qualsiasi codice altrui che ti restituisca una AssertionError è bacato. Pietro _______________________________________________ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python