2010-11-16 6 views
9

sto ottenendo l'errore:Tracing Python avvertimenti/errori ad un numero di riga in NumPy e SciPy

Warning: invalid value encountered in log 

Da Python e credo che l'errore è gettato dal NumPy (utilizzando la versione 1.5.0). Tuttavia, poiché sto chiamando la funzione "registro" in diversi punti, non sono sicuro da dove provenga l'errore. C'è un modo per ottenere numpy per stampare il numero di riga che ha generato questo errore?

Presumo che l'avviso è causato dal prendere il registro di un numero che è abbastanza piccolo da essere arrotondato a 0 o inferiore (negativo). È giusto? Qual è la solita origine di questi avvertimenti?

risposta

17

Mettere np.seterr(invalid='raise') nel codice (prima della errante log chiamata) causerà NumPy di ​​sollevare un'eccezione, invece di emettere un avvertimento. Questo ti darà un messaggio di errore di traceback e ti dirà la linea che Python stava eseguendo quando si è verificato l'errore.

0

Se si ha accesso alla sorgente numpy, si dovrebbe essere in grado di trovare la linea che stampa tale avviso (usando grep, ecc.) E modificare il file corrispondente per forzare un errore (usando un'asserzione, ad esempio) quando un il valore non valido è passato. Questo ti darà una traccia dello stack che punta al posto nel tuo codice che chiama log con il valore improprio.

Ho avuto una breve occhiata nella mia fonte numpy e non ho trovato nulla che corrisponda all'avvertimento che hai descritto (la mia versione di numpy è più vecchia della tua, però).

>>> import numpy 
>>> numpy.log(0) 
-inf 
>>> numpy.__version__ 
'1.3.0' 

È possibile che si chiami un'altra funzione di registro che non è numpy? Ad esempio, ecco uno che effettivamente genera un'eccezione quando viene dato un input non valido.

>>> import math 
>>> math.log(0) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
ValueError: math domain error 
Problemi correlati