[Python] Problema: TypeError!!!

2007-04-20 Per discussione fabio fossati
Scusate se posto l'intero programma, ma sto diventando pazzo per cercare di 
capire perchè ad un certo pto il mio programma python mi da un TypeError.
Il programma è il seguente:


from Numeric import *
from string import *
import os

def Convert_value(input_file):
number = input_file.readlines()
number.sort()
temp = []
try:
for i in range(len(number)):   ###  L'ERRORE SI VERIFICA QUI
temp.append(float(number[i]))
except TypeError:  
print "Errore"
return temp

def Create_file_out(lista,output_file,min,max,range):
i=0
printed=1
count=0
while(i < len(lista) and min < max):
if(printed):
output_file.write('range\t'+str(min)+'-'+str(min+range)+'\n\n')
if(min <= lista[i] <= min+range ):
temp=(str(lista[i]))
output_file.write(str(temp)+'\n')
i=i+1
count=count+1
printed=0
else:
output_file.write('#totale elementi range '+str(count)+'\n')
min  = min+range
count=0
printed=1



lista_file=os.listdir("./input_file")

for j in range(len(lista_file)):
try:
input_file = open("./input_file/"+lista_file[j],"r")
except IOError:
print "file "+lista_file[j]+" non esiste"
float_number=Convert_value(input_file)
input_file.close()
print "Viene creato il file di output per il file "+lista_file[j]+" preso 
come input"
try:
min = float(raw_input("Inserire il valore minimo: "))
max = float(raw_input("Inserire il valore massimo: "))
range = float(raw_input("Inserire il range desiderato: "))
except ValueError:
print "Non e'stato inserito un numero valido."
output_file=open(lista_file[j]+"_out.txt","a")
Create_file_out(float_number,output_file,min,max,range)
output_file.close()


Quello che fa questo programma è prendere tutti i file che sono contenuti in 
una cartella di input, convertire il contenuto dei file da stringhe a float, 
ordinarli e contarli per intervallo di range.
Dove segnalo il problema accade che per il primo file che viene preso in 
considerazione dal programma, non entro nel blocco "except" quindi nn mi da 
errore; per il successivo file, qualunque esso sia, riporta il seguente errore 
per la riga da me segnalata:


Traceback (most recent call last):
  File "/home/fabio/aggiusta dati/data.py", line 44, in ?
float_number=Convert_value(input_file)
  File "/home/fabio/aggiusta dati/data.py", line 10, in Convert_value
for i in range(len(number)):
TypeError: 'float' object is not callable


I file che mando in input contengono un numero variabile di numeri float 
ovviamente espressi, nel file, come stringhe.

Vi prego aiutatemi, nn so dove sbattere la testa.

P.s. ho usato un debugger ma i valori i tipi ecc ... sono tutti quelli che mi 
aspetto e sono corretti.


Grazie.

Fabio




  ___ 
L'email della prossima generazione? Puoi averla con la nuova Yahoo! Mail: 
http://it.docs.yahoo.com/nowyoucan.html___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Problema: TypeError!!!

2007-04-20 Per discussione Daniele Varrazzo

> Scusate se posto l'intero programma, ma sto diventando pazzo per cercare di
> capire perchè ad un certo pto il mio programma python mi da un TypeError.
> Il programma è il seguente:

> ...
> try:
> for i in range(len(number)):   ###  L'ERRORE SI VERIFICA QUI
>
> ...
>
> def Create_file_out(lista,output_file,min,max,range):
> ...
> min  = min+range

> I file che mando in input contengono un numero variabile di numeri float
> ovviamente espressi, nel file, come stringhe.
>
> Vi prego aiutatemi, nn so dove sbattere la testa.
>
> P.s. ho usato un debugger ma i valori i tipi ecc ... sono tutti quelli che
> mi aspetto e sono corretti.

Hai assegnato un valore a range, per cui la chiamata range() non è più
quella di sistema. Probabilmente c'è dentro un intero.

Rinomina la tua variabile range in modo che non conflitti con un builtin
(es. rng o range_).

Ciao!

-- 
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] Problema: TypeError!!!

2007-04-20 Per discussione orcimL
fabio fossati ha scritto:
> Scusate se posto l'intero programma, ma sto diventando pazzo per
> cercare di capire perchè ad un certo pto il mio programma python mi da
> un TypeError.
> Il programma è il seguente:
>
>
> from Numeric import *
> from string import *
> import os
>
> def Convert_value(input_file):
> number = input_file.readlines()
> number.sort()
> temp = []
> try:
> for i in range(len(number)):   ###  L'ERRORE SI VERIFICA QUI
> temp.append(float(number[i]))
> except TypeError: 
> print "Errore"
> return temp
>
> def Create_file_out(lista,output_file,min,max,range):
> i=0
> printed=1
> count=0
> while(i < len(lista) and min < max):
> if(printed):
>
> output_file.write('range\t'+str(min)+'-'+str(min+range)+'\n\n')
> if(min <= lista[i] <= min+range ):
> temp=(str(lista[i]))
> output_file.write(str(temp)+'\n')
> i=i+1
> count=count+1
> printed=0
> else:
> output_file.write('#totale elementi range '+str(count)+'\n')
> min  = min+range
> count=0
> printed=1
>
>
>
> lista_file=os.listdir("./input_file")
>
> for j in range(len(lista_file)):
> try:
> input_file = open("./input_file/"+lista_file[j],"r")
> except IOError:
> print "file "+lista_file[j]+" non esiste"
> float_number=Convert_value(input_file)
> input_file.close()
> print "Viene creato il file di output per il file
> "+lista_file[j]+" preso come input"
> try:
> min = float(raw_input("Inserire il valore minimo: "))
> max = float(raw_input("Inserire il valore massimo: "))
> range = float(raw_input("Inserire il range desiderato: "))
> except ValueError:
> print "Non e'stato inserito un numero valido."
> output_file=open(lista_file[j]+"_out.txt","a")
> Create_file_out(float_number,output_file,min,max,range)
> output_file.close()
>
>
> Quello che fa questo programma è prendere tutti i file che sono
> contenuti in una cartella di input, convertire il contenuto dei file
> da stringhe a float, ordinarli e contarli per intervallo di range.
> Dove segnalo il problema accade che per il primo file che viene preso
> in considerazione dal programma, non entro nel blocco "except" quindi
> nn mi da errore; per il successivo file, qualunque esso sia, riporta
> il seguente errore per la riga da me segnalata:
>
>
> Traceback (most recent call last):
>   File "/home/fabio/aggiusta dati/data.py", line 44, in ?
> float_number=Convert_value(input_file)
>   File "/home/fabio/aggiusta dati/data.py", line 10, in Convert_value
> for i in range(len(number)):
> TypeError: 'float' object is not callable
>
>
> I file che mando in input contengono un numero variabile di numeri
> float ovviamente espressi, nel file, come stringhe.
puoi fare un esempio del contenuto del file :-)
>
> Vi prego aiutatemi, nn so dove sbattere la testa.
>
> P.s. ho usato un debugger ma i valori i tipi ecc ... sono tutti quelli
> che mi aspetto e sono corretti.
>
>
> Grazie.
>
> Fabio
ciao Loris
>
> 
> 
> L'email della prossima generazione? Puoi averla con la nuova Yahoo!
> Mail
> 
>
>
> 
>
> ___
> 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


[Python] TypeError

2007-04-20 Per discussione fabio fossati
Ecco un esempio di fiel che mando in input:

0.96141 
0.90627 
1.0262 
1.0346 
1.1234 
1.1297 
1.1549 
1.1523 
1.3682 
1.4610 
1.4803 
1.1629 
1.1351 
1.1945 
1.4551 
1.2258 
1.2458 
1.1022 
1.1164 
1.0823 
1.0236 
1.0415 
1.3887 
1.5884 
1.6233 
2.5732 
1.3705 
1.3721

e cosi via.



  ___ 
L'email della prossima generazione? Puoi averla con la nuova Yahoo! Mail: 
http://it.docs.yahoo.com/nowyoucan.html___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Problema: TypeError!!!

2007-04-20 Per discussione Simone

fabio fossati ha scritto:


def Convert_value(input_file):
number = input_file.readlines()
number.sort()
temp = []
try:
for i in range(len(number)):   ###  L'ERRORE SI VERIFICA QUI
temp.append(float(number[i]))
except TypeError: 
print "Errore"

return temp


Non ho gli strumenti sotto mano e non so se risolve il problema, ma 
provare a fare:


for i in number:
tmp.append(float(number))

semplicemente? Infatti, .readlines() restituisce già una lista, e come 
tale si può reiterare col for. Ripeto, magari non risolve il problema, 
ma almeno vediamo se il problema è in "number" (ogni singola riga) o in 
range, no? :)


Simone

Chiacchiera con i tuoi amici in tempo reale! 
http://it.yahoo.com/mail_it/foot/*http://it.messenger.yahoo.com 
___

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


Re: [Python] Problema: TypeError!!!

2007-04-20 Per discussione Manlio Perillo

fabio fossati ha scritto:
Scusate se posto l'intero programma, ma sto diventando pazzo per cercare 
di capire perchè ad un certo pto il mio programma python mi da un TypeError.

Il programma è il seguente:




Ti do 2 consigli:
1) Dai una veloce lettura a
http://www.python.org/dev/peps/pep-0008

2) Non fare import *


from Numeric import *
from string import *
import os

def Convert_value(input_file):
number = input_file.readlines()
number.sort()
temp = []
try:
for i in range(len(number)):   ###  L'ERRORE SI VERIFICA QUI
temp.append(float(number[i]))
except TypeError: 
print "Errore"

return temp



Un modo più elegente per fare quello che ti serve è:
return [float(n) for n in sorted(input_file.readlines()]

Non hai nemmeno bisogno di una funzione separata.

Anche in seguito, usa gli iteratori al posto di un ciclo ordinario.



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


Re: [Python] Problema: TypeError!!!

2007-04-20 Per discussione orcimL
Manlio Perillo ha scritto:
> fabio fossati ha scritto:
>> Scusate se posto l'intero programma, ma sto diventando pazzo per
>> cercare di capire perchè ad un certo pto il mio programma python mi
>> da un TypeError.
>> Il programma è il seguente:
>>
>>
> return [float(n) for n in sorted(input_file.readlines()]
return [float(n) for n in sorted(input_file.readlines())]
 mancava una parentensi alla fine ;-)

semplificherei anche il metodo:

def Create_file_out(lista,output_file,min,range):

   output_file.write('range\t'+str(min)+'-'+str(min+range)+'\n\n')
count=0
for ele in lista:
if(min <= ele <= min+range ):
output_file.write(str(ele)+'\n')
count=count+1
output_file.write('#totale elementi in range '+str(count)+'\n')


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