Ruby Forum Italian Ruby user group > Ruby: gestione delle eccezioni

Posted by Luigi Maroncelli (Guest)
on 31.07.2008 12:00
(Received via mailing list)
Ciao a tutti,

le istruzioni all'interno di un ciclo sono racchiuse tra "begin - rescue
-end";
alla i-esima iterazione ho un errore, entro nel rescue e stampo un
messaggio, ma poi esco anche dal ciclo esterno (???);
o non ho capito bene il funzionamento della rescue oppure c'è un
problema che non riesco a vedere.............
dentro al blocco rescue ho provato a mettere anche l'istruzione next ...
ma niente (anche se in teroria non credo che serva.. era una mossa della
disperazione).

Vi posto il codice
------------------------------------------------------------------------------------------------------------------------------------
f3.each_line do |line|

  begin

    fileName = line.split('|')[0]
    File.delete(fileName)
    f4.write("#{fileName}|DELETED\n")

    numero_righe_deleted = numero_righe_deleted +1

  rescue Exception => ex

    puts("File #{fileName} not deleted - exception #{ex.message}\n")
    next

  end

end

puts("Numero di righe deleted #{numero_righe_deleted}")
------------------------------------------------------------------------------------------------------------------------------------

ecco l'output:

Numero di righe zippate 2104
File /xxxxxxxxxxxxxxxx not deleted - exception No such file or directory
- //xxxxxxxxxxxxxxxxxxxxxxxx
Numero di righe deleted 2066


Grazie in anticipo


Luigi
Posted by Andrea Cuius (q_rails)
on 31.07.2008 12:11
(Received via mailing list)
se non sbaglio quando un' eccezione viene sollevata si stoppa l'
esecuzione del metodo per richiamare(se esiste) il metodo rescue al
suo interno, dovrebbe essere un po come il return, solleva eccezione,
lancia la rescue e fa return.
Posted by Luigi Maroncelli (Guest)
on 31.07.2008 12:20
(Received via mailing list)
si ma se sono dentro un loop e voglio continuare ad iterare ?
In questo caso ad ogni iterazione c'è un file diverso da eliminare, se
uno mi da errore voglio proseguire eliminando gli altri ...... non
funziona come un try/catch ?



Luigi


Andrea (Q) ha scritto:
Posted by Luigi Maroncelli (Guest)
on 31.07.2008 13:10
(Received via mailing list)
Ciao a tutti,
solo per la cronaca credo di aver capito........ è una mia grossa
C*****A.....

in effetti il begin-rescue-end dentro ad un loop ritorna il controllo al
loop...
in questo caso specifico il problema era dovuto al fatto che il loop è 
su un file di testo che in effetti non era ancora stato creato
fisicamente...
infatti spezzando lo script in 2 script: uno zippa e riempi il file di
testo, l'altro legge il file di testo ed elimina i file tutto
funziona.........
anzi c'è un modo per aspettare che il file sia stato fisicamente scritto
sul filesystem prima di leggerlo se la creazione e la lettura
vengono fatte all'inteno di uno stesso script ?

Grazie per l'attenzione.

Luigi


*


*


Luigi Maroncelli ha scritto:
Posted by Alex Equinox (equinox86)
on 05.08.2008 12:39
Luigi Maroncelli wrote:
> Ciao a tutti,
> solo per la cronaca credo di aver capito........ � una mia grossa
> C*****A.....
> 
> in effetti il begin-rescue-end dentro ad un loop ritorna il controllo al
> loop...
> in questo caso specifico il problema era dovuto al fatto che il loop � 
su un file di testo che in effetti non era ancora stato creato
> fisicamente...
> infatti spezzando lo script in 2 script: uno zippa e riempi il file di
> testo, l'altro legge il file di testo ed elimina i file tutto
> funziona.........
> anzi c'� un modo per aspettare che il file sia stato fisicamente scritto
> sul filesystem prima di leggerlo se la creazione e la lettura
> vengono fatte all'inteno di uno stesso script ?
> 
> Grazie per l'attenzione.
> 
> Luigi

bah secondo em si puo' fare tutto in un unico script, comunque invece di 
fare il programmatore improsvvisato leggi le documentazione e comprati i 
libri ;)