Ruby: gestione delle eccezioni

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

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.

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 M. ha scritto:

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:

Luigi M. 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 :wink: