2012-07-17 11 views
7

Supponiamo che sto correndo un certo codice in modo interattivo in IPython e produce un'eccezione non rilevata, come:Come ottenere le mani sull'oggetto eccezione catturato dal gestore di eccezioni ipython predefinito?

In [2]: os.waitpid(1, os.WNOHANG) 
--------------------------------------------------------------------------- 
OSError         Traceback (most recent call last) 
<ipython-input-2-bacc7636b058> in <module>() 
----> 1 os.waitpid(1, os.WNOHANG) 

OSError: [Errno 10] No child processes 

Questa eccezione è ora intercettato dal gestore di eccezioni IPython predefinita e produce un messaggio di errore. È possibile in qualche modo estrarre l'oggetto eccezione che è stato catturato da IPython?

voglio avere lo stesso effetto in:

# Typing this into IPython prompt: 
try: 
    os.waitpid(1, os.WNOHANG) 
except Exception, exc: 
    pass 
# (now I can interact with "exc" variable) 

ma voglio che senza questo try/except boilerplate.

risposta

21

Penso sys.last_value dovrebbe fare il trucco:

In [8]: 1/0 
--------------------------------------------------------------------------- 
ZeroDivisionError       Traceback (most recent call last) 

/home/ubuntu/<ipython console> in <module>() 

ZeroDivisionError: integer division or modulo by zero 

In [11]: sys.last_value 
Out[11]: ZeroDivisionError('integer division or modulo by zero',) 

Se si vuole ancora più divertente con queste cose, check-out il traceback module, ma che probabilmente non sarà di grande utilità all'interno ipython.

Problemi correlati