Re: [Python] Numero to byte

2011-01-12 Per discussione Marco Beri
2011/1/11 Nicola Larosa n...@teknico.net

 Vittorio Zuccala' wrote:
  vi scrivo su un parere su un algoritmo...
  Secondo voi c'è un modo più elegante o meno dispendioso?

 Secondo gli sviluppatori di Django, no:


 http://code.djangoproject.com/browser/django/trunk/django/template/defaultfilters.py#L794



Nicola,
ma, scusa, allora è proprio sbagliato quel codice!

Stando a 
http://en.wikipedia.org/wiki/Kibibytehttp://en.wikipedia.org/wiki/Kibibyte#cite_note-1
dovrebbero
o usare 1000 al posto di 1024 oppure cambiare KB (che comunque dovrebbe
essere kB) in KiB, MB in MiB, ecc.

Ciao.
Marco.

-- 
http://thinkcode.tv/gratis - Capire in 15 minuti cosa può fare Python
http://stacktrace.it - Aperiodico di resistenza informatica
http://python.thinkcode.tv - Videocorso di Python
http://beri.it - Blog di una testina di vitello
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Numero to byte

2011-01-12 Per discussione Nicola Larosa
 Vittorio Zuccala' wrote:
 vi scrivo su un parere su un algoritmo... Secondo voi c'è un modo
 più elegante o meno dispendioso?

 Nicola Larosa wrote:
 Secondo gli sviluppatori di Django, no:

 http://code.djangoproject.com/browser/django/trunk/django/template/defaultfilters.py#L794

Marco Beri wrote:
 Nicola, ma, scusa, allora è proprio sbagliato quel codice!

 Stando a http://en.wikipedia.org/wiki/Kibibyte
 http://en.wikipedia.org/wiki/Kibibyte#cite_note-1 dovrebbero o
 usare 1000 al posto di 1024 oppure cambiare KB (che comunque dovrebbe
 essere kB) in KiB, MB in MiB, ecc.

Eh, spesso gli standard calati dall'alto si scontrano con decadi di uso
pregresso: non è facile cambiare le abitudini di milioni di persone per
decreto. :-)

Prova a sollevare la questione su django-developers, son curioso di vedere
la reazione della comunità. :-) (Non sembra se ne sia parlato lì, né trovo
bug in proposito.)

-- 
Nicola Larosa - http://www.tekNico.net/

Grief is but a gate, and our tears a kind of key,
opening a place of wonder that’s been locked away.
 - David Abram, rephrased by Dave Pollard, August 2010

___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


[Python] twisted ipython

2011-01-12 Per discussione Alessandro Dentella
Ciao,


mi risulta che in questa lista ci siano un certo numero di utilizzatori di
twisted, quindi spero che mi possiate dare la dritta giusta sulla
integrazione fra ipython e twisted.

Ho trovato questa [1] ricetta di Matthew Scott seguita da un commento di Bob
Ippolito che suggerisce un differente approccio. Entrambe vecchie di circa 5
anni.

Nel manule di ipython trovo un po' criptica la parte relativa alle opzioni
sui thread non riuscendo a capire quale si riferirebbe a twisted:

-gthread, -qthread, -q4thread, -wthread, -pylab
Only  ONE  of  these  can  be given, and it can only be given as the first 
option
passed to IPython (it will have no effect in any other position).   They  
provide
threading  support  for  the  GTK,  QT3, QT4 and WXWidgets toolkits, for 
the mat-
plotlib library and Twisted reactor.


Quale è il modo suggerito di usare twisted da ipython?

grazie
sandro
*:-)


-- 
Sandro Dentella  *:-)
http://www.reteisi.org Soluzioni libere per le scuole
http://sqlkit.argolinux.orgSQLkit home page - PyGTK/python/sqlalchemy
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Numero to byte

2011-01-12 Per discussione lordkrandel
# Bugfix, non ritornava per quelli sopra i 1024 PiB

def f(
bytes,
factor=1024,
labels=['', 'Ki', 'Mi', 'Gi', 'Ti', 'Pi'],
precision=4 ):
for x,y in map(
lambda x: ( factor**(x[0]+1),
('%.' + str(precision) + 'lf %sB') % (bytes / factor**x[0], x[1])
),
enumerate(labels)
):
if (bytes  x):
return y
# è un po' bruttino
return ('%.' + str(precision) + 'lf %sB') % (bytes / factor**len(labels), 
labels[-1])


# Test
for x in range(16):
y = 512.12*(10**x)
print f(y)

-- 
Wyrmskull
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Numero to byte

2011-01-12 Per discussione Lorenzo Sutton

lordkrandel wrote:

#On 11/01/2011 15.00, Lorenzo Sutton wrote:
#  def bytesToHuman (b,factor=1024.):
#  units = ['bytes', 'KB', 'MB', 'GB', 'TB', 'PB']
#  for i in xrange (1,len (units)+1):
#  if b  factor ** i or i= len(units):
#  return ('%.1f %s') % ((b/(factor **(i-1))),units[i-1])
#
# Che ne dici di un po' di magia

Eh eh.. ai limiti dell'offuscamento ;)

# Dimmi se funziona

Certo che funziona.. molto carina.

def f(
 bytes,
 factor=1024,
 labels=['', 'Ki', 'Mi', 'Gi', 'Ti', 'Pi'],
 precision=4
):
 for x,y in map(
 lambda x: (
 factor**(x[0]+1),
 ('%.' + str(precision) + 'lf %sB') % (bytes / factor**x[0], x[1])
 ),
 enumerate(labels)
 ):
 if (bytes  x) or (y == labels[-1]):
 return y

# Test
for x in range(16):
 y = 512.12*(10**x)
 print f(y)


___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Numero to byte

2011-01-12 Per discussione lordkrandel

On 12/01/2011 11.17, enrico franchi wrote:
 Scusa, ma a me viene solo da dire readability counts.

Era un esercizio. Ho 26 anni, non voglio fare da maestro a nessuno :)

Gli if possono essere ripetuti, certo, ma anche meglio
1024 * 1024 -- 1024 ** 2

Il bugfix è veloce, ci penso un po' su e lo scrivo meglio quando ho un 
attimo.


Comunque tutto quello che dev'essere leggibile è nei parametri della 
funzione, che possono essere aggiornati più facilmente.


Ad esempio, da 1024 in 1000 puoi farlo direttamente dalla chiamata del 
metodo, invece che modificare... (5+4+3+2+1 * 2)=30 valori nel codice.

E puoi anche modificare le etichette.

Certo, modificare con il copia incolla piace alla gente... ^__^ ''
Insomma, prendila sul ridere, guardandone gli aspetti positivi.


--
Wyrmskull
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Numero to byte

2011-01-12 Per discussione lordkrandel
On 12/01/2011 11.29, lordkrandel wrote:
 Il bugfix è veloce, ci penso un po' su e lo scrivo meglio quando ho un 
 attimo.

def f( bytes, factor, labels, precision ):

# costruisco una tupla di tuple ( limite massimo, etichetta )
# prima faccio l'enumerazione delle etichette, poi faccio fattore**indice

for n, label in map( lambda k: ( factor**k[0], k[1] ), enumerate(labels,1) 
):

# se i byte sono sotto il limite, o se è l'ultima etichetta disponibile

if (bytes  n) or (label == labels[-1]):

# ritorna una stringa formattata con i byte
# con l'etichetta corrente e la precisione indicata

return ('%.' + str(precision) + 'lf %s') % (bytes * factor / n, 
label)

def f_test():
for x in range(22):
y = 512.12*(10**x)
print   f(y, 1024, ('', 'KiB', 'MiB', 'GiB', 'TiB', 'PiB'), 4)
print '  ', f(y, 1000, ('', 'KB',  'MB',  'GB',  'TB',  'PB' ), 2)
f_test()

Continuo a pensare che per funzioni il cui codice andrà a cambiare poco nel
corso del tempo, più della chiarezza della sintassi del codice conti
la chiarezza della funzionalità che offre.
Certo capire come funziona non è proprio semplicissimo, ma in quello possono
aiutare due righe di commento.


-- 
Wyrmskull
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Numero to byte

2011-01-12 Per discussione Daniele Varrazzo
On Wed, 12 Jan 2011 12:02:57 +0100, lordkrandel lordkran...@gmail.com
wrote:

 for n, label in map( lambda k: ( factor**k[0], k[1] ),
 enumerate(labels,1) ):

Forse sarebbe meglio

for i, label in enumerate(labels, 1):
n = factor ** i
...


Se leggi http://docs.python.org/library/stdtypes.html#string-formatting:

# Precision (optional), given as a '.' (dot) followed by the 
precision. If specified as '*' (an asterisk), the actual width 
is read from the next element of the tuple in values, and the value 
to convert comes after the precision.

Quindi

 return ('%.' + str(precision) + 'lf %s') % (bytes * factor /
 n, label)

potrbbe essere scritto:

  return ('%.*lf %s') % (precision, bytes * factor / n, label)

Tutto untested.

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

___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Numero to byte

2011-01-12 Per discussione lordkrandel
On 12/01/2011 12.15, Daniele Varrazzo wrote:
 On Wed, 12 Jan 2011 12:02:57 +0100, lordkrandellordkran...@gmail.com
 wrote:
  for n, label in map( lambda k: ( factor**k[0], k[1] ), 
 enumerate(labels,1) ):
 
 Forse sarebbe meglio
  for i, label in enumerate(labels, 1):
  n = factor ** i
  ...

M'ha preso un evidente attacco di oneliner-ite

 return ('%.' + str(precision) + 'lf %s') % (bytes * factor / n, label)

 potrebbe essere scritto:
 return ('%.*lf %s') % (precision, bytes * factor / n, label)

# Wow! Grazie!!! Quante cose s'imparano (leggendo al posto giusto). Tested!
# Ora è molto più carino e pythoneggiante :)

def f( bytes, factor, labels, precision ):
for i, label in enumerate(labels,1):
n = factor ** i
if (bytes  n) or (label == labels[-1]):
return ('%.*lf %s') % (precision, bytes * factor / n, label)

def f_test():
for x in range(22):
y = 512*(10**x)
print   f(y, 1024, ('bytes', 'KiB', 'MiB', 'GiB', 'TiB', 'PiB'), 4)
print '  ', f(y, 1000, ('bytes', 'KB',  'MB',  'GB',  'TB',  'PB' ), 2)
f_test()




-- 
Wyrmskull
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Numero to byte

2011-01-12 Per discussione Lorenzo Sutton

lordkrandel wrote:

On 12/01/2011 11.29, lordkrandel wrote:

 return ('%.' + str(precision) + 'lf %s') % (bytes * factor / n, 
label)
Una cosa importante è che bytes * factor / n lavori con float, 
altrimenti se viene immesso bytes e factor interi la divisione sarà intera.

Credo che basti fare (untested) bytes = float (bytes) da qualche parte.

Lorenzo.

___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Numero to byte

2011-01-12 Per discussione lordkrandel
On 12/01/2011 12.25, lordkrandel wrote:
 def f( bytes, factor, labels, precision ):
  for i, label in enumerate(labels,1):
  n = factor ** i
  if (bytes  n) or (label == labels[-1]):
  return ('%.*lf %s') % (precision, bytes * factor / n, label)
 
def f_test():
for x in range(22):
y = 512*(10**x)
print   f(y, 1024, ('bytes', 'KiB', 'MiB', 'GiB', 'TiB', 'PiB'), 4)
print '  ', f(y, 1000, ('bytes', 'KB',  'MB',  'GB',  'TB',  'PB' ), 2)

# Funziona anche con secondi, minuti e ore! ^__^ ''
for x in range(5):
y = 35*(10**x)
print '%s s' % y
print '  ', f(y, 60, ('s', 'm', 'h' ), 2)
f_test()



-- 
Wyrmskull
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Numero to byte

2011-01-12 Per discussione Daniele Varrazzo
On Wed, 12 Jan 2011 12:29:32 +0100, Lorenzo Sutton lsut...@libero.it
wrote:
 lordkrandel wrote:
 On 12/01/2011 11.29, lordkrandel wrote:

  return ('%.' + str(precision) + 'lf %s') % (bytes * factor
  / n, label)
 Una cosa importante è che bytes * factor / n lavori con float, 
 altrimenti se viene immesso bytes e factor interi la divisione sarà
 intera.
 Credo che basti fare (untested) bytes = float (bytes) da qualche parte.

O anche avere from __future__ import division nel modulo.

-- 
Daniele Varrazzo - Develer S.r.l. 
http://www.develer.com
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


[Python] Tornare alla versione python distribuita con osx

2011-01-12 Per discussione Karim Gorjux
Ciao a tutti, ho installato python 2.7.1 per Mac, ma ora mi servirebbe
usare la versione di sistema che viene distribuita con osx. Ho già
modificato la path del mio .bash_profile, ma non è cambiato nulla.

Ho controllato il /etc/bashrc, ma non c'è nessuna modifica della PATH,
cosa devo modificare?

Grazie
-- 
K.
Blog Personale: http://www.karimblog.net
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Tornare alla versione python distribuita con osx

2011-01-12 Per discussione Simone Dalla
Il giorno 12 gennaio 2011 12:48, Karim Gorjux lemieli...@gmail.com ha
scritto:

 Ciao a tutti, ho installato python 2.7.1 per Mac, ma ora mi servirebbe
 usare la versione di sistema che viene distribuita con osx. Ho già
 modificato la path del mio .bash_profile, ma non è cambiato nulla.

 Ho controllato il /etc/bashrc, ma non c'è nessuna modifica della PATH,
 cosa devo modificare?



Guarda nel file .profile, il mio in questo momento (sto usando come te la
2.7.1) è:

# Setting PATH for Python 2.7
# The orginal version is saved in .profile.pysave
PATH=/Library/Frameworks/Python.framework/Versions/2.7/bin:${PATH}
export PATH

dovresti avere anche tu le stesse righe, commentale o vedi se hai il
file .profile.pysave e ripristinalo.



-- 
Simo

- Registered Linux User #395060

- Software is like sex, it is better when it is free  -- Linus B. Torvalds
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Tornare alla versione python distribuita con osx

2011-01-12 Per discussione Karim Gorjux
2011/1/12 Simone Dalla simoda...@gmail.com:
 Guarda nel file .profile, il mio in questo momento (sto usando come te la
 2.7.1) è:

Il file è il .bash_profile e ho già commentato la modifica fatta
dall'installazione della 2.7.1
Proprio non capisco dove andare a toccare.

-- 
K.
Blog Personale: http://www.karimblog.net
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Numero to byte

2011-01-12 Per discussione Andrea Ambu
Pythonese

def human_from_bytes(bytes, factor=1024., labels=['B', 'KiB', 'MiB', 'GiB',\
  'TiB', 'PiB'], precision=2):
index = 0
while 1. * bytes / factor**index  factor and index  len(labels)-1:
index += 1
return ('%.*lf %s') % (precision, 1.*bytes/factor**index, labels[index])



-- 
Andrea
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Numero to byte

2011-01-12 Per discussione Marcello
Massi`,
pero` il codice qui (cito Nicola, 6a mail di questo thread)
http://code.djangoproject.com/browser/django/trunk/django/template/defaultfilters.py#L794
lo trovo piu` leggibile.
(Esplicito e` meglio che implicito ecc... )

Opinioni personali, eh :)


On Wed, Jan 12, 2011 at 1:54 PM, Andrea Ambu andrea...@gmail.com wrote:
 Pythonese

 def human_from_bytes(bytes, factor=1024., labels=['B', 'KiB', 'MiB', 'GiB',\
                                                  'TiB', 'PiB'], precision=2):
        index = 0
        while 1. * bytes / factor**index  factor and index  len(labels)-1:
                index += 1
        return ('%.*lf %s') % (precision, 1.*bytes/factor**index, 
 labels[index])



 --
 Andrea
 ___
 Python mailing list
 Python@lists.python.it
 http://lists.python.it/mailman/listinfo/python

___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Tornare alla versione python distribuita con osx

2011-01-12 Per discussione Giovanni Marco Dall'Olio
$: which python # ti dice quale esecutabile viene lanciato quando dai
il comando 'python'

$: alias python # ti dice se python è un alias

$: /Library/Frameworks/Python.framework/Versions/??/python # se la
versione vecchia di python è ancora installata, la puoi eseguire
direttamente chiamandola in questo modo (oppure con bash
path-to-python-bin).

$: alias python=/Library/Frameworks/Python.framework/Versions/??/python
# se scopri dove è installata la vecchia versione di python, puoi
creare un alias in questo modo

inoltre, se hai cambiato .bashrc o simile, ricordati di ricaricarlo con source:
$: source ~/.bashrc

non ho un sistema mac, quindi non ti posso essere utile piu' di tanto.

2011/1/12 Fabrizio Mancini mr.f...@gmail.com:
 2011/1/12 Karim Gorjux lemieli...@gmail.com:
 Il file è il .bash_profile e ho già commentato la modifica fatta
 dall'installazione della 2.7.1
 Proprio non capisco dove andare a toccare.
 Domanda stupida:
 hai già chiuso (CMD-Q) la finestra di terminale e riaperta? Altimenti
 il bash non si ricarica e non legge i nuovi settaggi.
 HTH
 Ciao Fabrizio
 ___
 Python mailing list
 Python@lists.python.it
 http://lists.python.it/mailman/listinfo/python




-- 
Giovanni Dall'Olio, phd student
Department of Biologia Evolutiva at CEXS-UPF (Barcelona, Spain)

My blog on bioinformatics: http://bioinfoblog.it
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Numero to byte

2011-01-12 Per discussione lordkrandel
def f( bytes, factor, labels, precision ):
for i, label in enumerate(labels,1):
if (bytes  factor ** i) or (label == labels[-1]):
return '%.*lf %s' % (precision, bytes / factor ** (i-1), label)

Dipende a cosa ti serve. Se è solo per 1024 e per i file, quella 
di Django va benissimo, ma se devi convertire i millimetri in
Kilometri allora dovresti fotocopiarne un'altra.

On 12/01/2011 13.59, Marcello wrote:
 Massi`,
 pero` il codice qui (cito Nicola, 6a mail di questo thread)
 http://code.djangoproject.com/browser/django/trunk/django/template/defaultfilters.py#L794
 lo trovo piu` leggibile.
 (Esplicito e` meglio che implicito ecc... )
 
 Opinioni personali, eh :)
 
 
 On Wed, Jan 12, 2011 at 1:54 PM, Andrea Ambuandrea...@gmail.com  wrote:
 Pythonese

 def human_from_bytes(bytes, factor=1024., labels=['B', 'KiB', 'MiB', 'GiB',\
   'TiB', 'PiB'], 
 precision=2):
 index = 0
 while 1. * bytes / factor**index  factor and index  len(labels)-1:
 index += 1
 return ('%.*lf %s') % (precision, 1.*bytes/factor**index, 
 labels[index])



 --
 Andrea
 ___
 Python mailing list
 Python@lists.python.it
 http://lists.python.it/mailman/listinfo/python

 ___
 Python mailing list
 Python@lists.python.it
 http://lists.python.it/mailman/listinfo/python
 


-- 
Wyrmskull
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


[Python] Sulla gestione degli errori

2011-01-12 Per discussione Vittorio Zuccala'
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?).

Successivamente:
*File csrErrori:*
class Errore(Exception):
pass

class ErroreValore(Errore):
def __init__(self,valore):
self.valore=valore

*Modulo csr:*
# Varie istruzioni

from csrErrori import *
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?
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.
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Sulla gestione degli errori

2011-01-12 Per discussione Giorgio Zoppi
Ne approffitto per chiedere qualcosina su come vanno gestite le
eccezioni in Python? Quali sono gli anti-pattern, cosa
non fare assolutamente?

Il 12 gennaio 2011 17:59, Vittorio Zuccala'
vittorio.zucc...@gmail.com ha scritto:
 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?).

 Successivamente:
 File csrErrori:
 class Errore(Exception):
     pass

 class ErroreValore(Errore):
     def __init__(self,valore):
     self.valore=valore

 Modulo csr:
 # Varie istruzioni

 from csrErrori import *
 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?
 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.

 ___
 Python mailing list
 Python@lists.python.it
 http://lists.python.it/mailman/listinfo/python





-- 
Quiero ser el rayo de sol que cada día te despierta
para hacerte respirar y vivir en me.
Favola -Moda.
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Sulla gestione degli errori

2011-01-12 Per discussione Daniele Varrazzo
On Wed, 12 Jan 2011 17:59:43 +0100, Vittorio Zuccala'
vittorio.zucc...@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
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Numero to byte

2011-01-12 Per discussione Stefano Dal Pra
2011/1/11 Vittorio Zuccala' vittorio.zucc...@gmail.com

 Buongiorno a tutti,
 vi scrivo su un parere su un algoritmo...
 Ho un file con una serie di numeri che in qualche modo recupero.
 Questi numeri rappresentano byte, Kb, Mb, Gb, Tb...
 Vorrei trasformarli in modo leggibile.
 Ad esempio (posso immagazzinarli in un array, dizionario o altro... non
 importa):

 172183142400=172,1Gb
 250057060352=250,0Gb
 132450=132,4Kb

 e così via.
 L'operazione è di per sè semplice ma l'ho risolta con una serie di if.
 Se maggiore di 1000, dividi per mille, e mettici kb a fianco.
 Se maggiore di 1000.000.

 Secondo voi c'è un modo più elegante o meno dispendioso?
 Grazie in anticipo...

 Ciao, io propongo questo:
import math
u='KMGTP'
#faccio una lista di numeri fino a 10**15
L=[3.14159 * 10**n for n in range(15)]

for x in L:
n=int(math.log10(x))
k=n//3
x1=x/(10**(k*3))
print %s -- %.1f %s%(x,x1,u[k]+'B')

Che da come output:

 for x in L:
... n=int(math.log10(x))
... k=n//3
... x1=x/(10**(k*3))
... print %s -- %.1f %s%(x,x1,u[k]+'B')
...
3.14159 -- 3.1 KB
31.4159 -- 31.4 KB
314.159 -- 314.2 KB
3141.59 -- 3.1 MB
31415.9 -- 31.4 MB
314159.0 -- 314.2 MB
3141590.0 -- 3.1 GB
31415900.0 -- 31.4 GB
314159000.0 -- 314.2 GB
314159.0 -- 3.1 TB
3141590.0 -- 31.4 TB
31415900.0 -- 314.2 TB
3.14159e+12 -- 3.1 PB
3.14159e+13 -- 31.4 PB
3.14159e+14 -- 314.2 PB

Se vuoi qualcosa di piu' compatto:

n=lambda x: int(math.log10(x))//3
T=[%.1f %s%(x/(10**(n(x)*3)),u[n(x)]+'B') for x in L]

e T e' la lista dei risultati:
 T=[%.1f %s%(x/(10**(n(x)*3)),u[n(x)]+'B') for x in L]
 T
['3.1 KB', '31.4 KB', '314.2 KB', '3.1 MB', '31.4 MB', '314.2 MB', '3.1 GB',
'31.4 GB', '314.2 GB', '3.1 TB', '31.4 TB', '314.2 TB', '3.1 PB', '31.4 PB',
'314.2 PB']

Ciao

Stefano



 ___
 Python mailing list
 Python@lists.python.it
 http://lists.python.it/mailman/listinfo/python


___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Sulla gestione degli errori

2011-01-12 Per discussione Marco Mariani
2011/1/12 Daniele Varrazzo p...@develer.com

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



Comodo anche log.exception(), che scrive il traceback senza dover chiamare
print_exc()

http://docs.python.org/library/logging.html#logging.Logger.exception
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Numero to byte

2011-01-12 Per discussione Stefano Dal Pra
Ciao, io propongo questo:

import math
u='KMGTP'
#faccio una lista di numeri fino a 10**15
L=[3.14159 * 10**n for n in range(15)]
for x in L:
n=int(math.log(x,1000))
k=n
x1=x/(10**(3*k))
print %s %.1f %s%(x,x1,u[k]+'B')

Che da come output:


 for x in L:
... n=int(math.log(x,1000))
... k=n
... x1=x/(10**(3*k))
... print %s %.1f %s%(x,x1,u[k]+'B')
...
3.14159 3.1 KB
31.4159 31.4 KB
314.159 314.2 KB
3141.59 3.1 MB
31415.9 31.4 MB
314159.0 314.2 MB
3141590.0 3.1 GB
31415900.0 31.4 GB
314159000.0 314.2 GB
314159.0 3.1 TB
3141590.0 31.4 TB
31415900.0 314.2 TB
3.14159e+12 3.1 PB
3.14159e+13 31.4 PB
3.14159e+14 314.2 PB

Se vuoi qualcosa di piu' compatto:
n=lambda x: int(math.log(x,1000))
T=[%.1f %s%(x/(10**(n(x)*3)),u[n(x)]+'B') for x in L]
 T
['3.1 KB', '31.4 KB', '314.2 KB', '3.1 MB', '31.4 MB', '314.2 MB', '3.1 GB',
'31.4 GB', '314.2 GB', '3.1 TB', '31.4 TB', '314.2 TB', '3.1 PB', '31.4 PB',
'314.2 PB']

Se vuoi 1KB == 1024B metti 1024 al posto di mille in math.log

Ciao

Stefano


2011/1/11 Vittorio Zuccala' vittorio.zucc...@gmail.com

 Buongiorno a tutti,
 vi scrivo su un parere su un algoritmo...
 Ho un file con una serie di numeri che in qualche modo recupero.
 Questi numeri rappresentano byte, Kb, Mb, Gb, Tb...
 Vorrei trasformarli in modo leggibile.
 Ad esempio (posso immagazzinarli in un array, dizionario o altro... non
 importa):

 172183142400=172,1Gb
 250057060352=250,0Gb
 132450=132,4Kb

 e così via.
 L'operazione è di per sè semplice ma l'ho risolta con una serie di if.
 Se maggiore di 1000, dividi per mille, e mettici kb a fianco.
 Se maggiore di 1000.000.

 Secondo voi c'è un modo più elegante o meno dispendioso?
 Grazie in anticipo...

 ___
 Python mailing list
 Python@lists.python.it
 http://lists.python.it/mailman/listinfo/python


___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Numero to byte

2011-01-12 Per discussione Andrea Ambu
2011/1/12 Marco Mariani bir...@gmail.com:
 va bene tutto purche' smettiate di ridefinire la builtin 'bytes'... :-)


Ma dai, mi pare difficile che ci sia bisogno di utilizzarla in un
eventuale refactor di quella funzione :P



-- 
Andrea
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python