Salve forum, è possibile creare un'eccezione per un warning? Cerco di spiegarmi meglio: utilizzo un modulo che in alcuni casi rari e particolari (diciamo non RFC compliant) mi blocca l'esecuzione di uno script restituendo: # ./lib/modulo/mod.rb:123: warning: etc. etc. Ho provato invano ad utilizzare qualcosa come "rescue warning", ma a quanto pare rescue si utilizza solo per sollevare eccezioni riguardanti gli errori. Non avendo la possibilità di modificare il modulo, come potrei fare? So che la mia richiesta è un po' generica, ma se avete qualche suggerimento ve ne sarei grato. Colgo l'occasione per farvi gli Auguri di un Felice Anno nuovo!
on 2009-12-30 16:33
on 2009-12-30 16:40
2009/12/30 Alfonso Caponi <alfonso.caponi@gmail.com>: > Salve forum, > > è possibile creare un'eccezione per un warning? Cerco di spiegarmi > meglio: utilizzo un modulo che in alcuni casi rari e particolari > (diciamo non RFC compliant) mi blocca l'esecuzione di uno script > restituendo: ... > Non avendo la possibilità di modificare il modulo, come potrei fare? So > che la mia richiesta è un po' generica, ma se avete qualche suggerimento > ve ne sarei grato. Che modulo e'? Puoi fare un esempio concreto? ciao, Luca
on 2009-12-30 16:59
Luca Mearelli wrote: > 2009/12/30 Alfonso Caponi <alfonso.caponi@gmail.com>: >> Salve forum, >> >> � possibile creare un'eccezione per un warning? Cerco di spiegarmi >> meglio: utilizzo un modulo che in alcuni casi rari e particolari >> (diciamo non RFC compliant) mi blocca l'esecuzione di uno script >> restituendo: > ... >> Non avendo la possibilit� di modificare il modulo, come potrei fare? So >> che la mia richiesta � un po' generica, ma se avete qualche suggerimento >> ve ne sarei grato. > > Che modulo e'? Puoi fare un esempio concreto? > > ciao, > Luca Il modulo è "snmp" (http://snmplib.rubyforge.org/). Il warning appare nel momento in cui si faccia una richiesta 'walk' verso alcuni apparati di rete che non implementano 'get-next' nel modo corretto/o standard. snmp.walk(["1.3.6.1.2.1.25.4.2.1.2"]) do |name| ... end Non ho un sistema con IP pubblico da farvi provare. A prescindere dall'SNMP ecc. non vi viene in mente qualche workaround? :) Per quel poco che conosco di Ruby, pensavo all'utilizzo di un'eccezione :( Grazie
on 2009-12-31 10:31
Alfonso Caponi wrote: > Salve forum, > > è possibile creare un'eccezione per un warning? Cerco di spiegarmi > meglio: utilizzo un modulo che in alcuni casi rari e particolari > (diciamo non RFC compliant) mi blocca l'esecuzione di uno script > restituendo: > > # ./lib/modulo/mod.rb:123: warning: etc. etc. Se è un messaggio su standard output o standard error mi sa che quel che devi fare è ridirigerlo in una pipe verso un programma che in risposta ai warning ti generi le eccezioni che poi gestirai. Non so quanto sia compatibile con l'architettura generale del tuo sistema, ma è un'idea. Quel modulo è closed source e non si può proprio toccare? > Ho provato invano ad utilizzare qualcosa come "rescue warning", ma a > quanto pare rescue si utilizza solo per sollevare eccezioni riguardanti > gli errori. Cos'è rescue warning? > Non avendo la possibilità di modificare il modulo, come potrei fare? So > che la mia richiesta è un po' generica, ma se avete qualche suggerimento > ve ne sarei grato. > > Colgo l'occasione per farvi gli Auguri di un Felice Anno nuovo! Grazie e buon 2010 anche a te! Paolo
on 2010-01-03 00:20
> Se è un messaggio su standard output o standard error mi sa che quel che > devi fare è ridirigerlo in una pipe verso un programma che in risposta > ai warning ti generi le eccezioni che poi gestirai. Non so quanto sia > compatibile con l'architettura generale del tuo sistema, ma è un'idea. > Quel modulo è closed source e non si può proprio toccare? Il problema di utilizzare una pipe è che il mio script è parte di un programma più grande, che lo "ingloba" come se fosse un modulo. Capisco anche che senza mostrare il mio codice risulta difficile identificare il mio problema. Il modulo è opensource, ma visto che viene utilizzato da altri script preferivo non modificarlo. > Cos'è rescue warning? Avendo poca esperienza con Ruby e con la programmazione in generale, sto provando di tutto, cercando di poter gestire un'eccezione per un warning. Fanta-programmazione :)
on 2010-01-03 12:10
2010/1/3 Alfonso Caponi <alfonso.caponi@gmail.com>: > Il modulo è opensource, ma visto che viene utilizzato da altri script > preferivo non modificarlo. puoi modificarlo nel tuo singolo programma facendo monkey patching, cioè ridefinendo quel pezzetto. Se il warning ad esempio ti viene da un metodo #foo() nella class Bar del modulo Baz puoi ridefinirlo e cambiarlo nel tuo codice con require 'snmp' # questo ridefinisce il metoto Baz::Bar#foo in questo script module Baz class Bar def foo() #copincolla il codice originale e cambia quel che serve end end end è una zozzeria ma se la libreria non è abbastanza modulare da lasciartelo fare in un modo più raffinato dovrebbe funzionare. >> Cos'è rescue warning? > Avendo poca esperienza con Ruby e con la programmazione in generale, sto > provando di tutto, cercando di poter gestire un'eccezione per un > warning. Fanta-programmazione :) non troppo, in smalltalk (e in perl6 e in common lisp, IIRC) puoi davvero trattare i warning come exception http://en.wikipedia.org/wiki/GNU_Smalltalk#Exceptions purtroppo in ruby no :)
on 2010-01-04 09:48
gabriele renzi wrote: > non troppo, in smalltalk (e in perl6 e in common lisp, IIRC) puoi > davvero trattare i warning come exception > http://en.wikipedia.org/wiki/GNU_Smalltalk#Exceptions > > purtroppo in ruby no :) Da quel che ho letto ho capito, magari sbagliando, che un warning smalltalk sia un particolare tipo di eccezione che una volta sollevata mostra il messaggio a lei associato. Non vedo difficoltà a fare in ruby la stessa cosa, creando una classe Warning che derivi da Exception e che faccia la puts del messaggio nell'initialize, ma è possibile che ci siano dettagli dei warning smalltalk che mi sfuggono. Limitandoci a risolvere il problema di Alfonso, la strada che suggerisci mi pare buona perché basterebbe fare il raise dell'eccezione subito dopo la puts del messaggio. Paolo
Please log in before posting. Registration is free and takes only a minute.
Existing account
(Switch to SSL-encrypted connection)
NEW: Do you have a Google/GoogleMail or Yahoo account? No registration required!
Log in with Google account | Log in with Yahoo account
Log in with Google account | Log in with Yahoo account
No account? Register here.