Rescue warning

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!

2009/12/30 Alfonso C. [email protected]:

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

Alfonso C. 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

Luca M. wrote:

2009/12/30 Alfonso C. [email protected]:

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? :slight_smile: Per quel
poco che conosco di Ruby, pensavo all’utilizzo di un’eccezione :frowning:

Grazie

2010/1/3 Alfonso C. [email protected]:

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 :slight_smile:

non troppo, in smalltalk (e in perl6 e in common lisp, IIRC) puoi
davvero trattare i warning come exception

purtroppo in ruby no :slight_smile:

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 :slight_smile:

gabriele renzi wrote:

non troppo, in smalltalk (e in perl6 e in common lisp, IIRC) puoi
davvero trattare i warning come exception
GNU Smalltalk - Wikipedia

purtroppo in ruby no :slight_smile:

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