2012-07-17 19 views
7

मान लीजिए मैं IPython में सहभागी कुछ कोड चल रहा हूँ और ऐसा लगता है, न आया हुआ अपवाद पैदा करता है: अब डिफ़ॉल्ट IPython अपवाद संचालक के द्वारा रोका जाता हैडिफ़ॉल्ट ipython अपवाद हैंडलर द्वारा पकड़े गए अपवाद ऑब्जेक्ट पर अपने हाथ कैसे प्राप्त करें?

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 

यह अपवाद और एक त्रुटि संदेश पैदा करता है। क्या आईपीथन द्वारा पकड़ा गया अपवाद ऑब्जेक्ट निकालने के लिए किसी भी तरह से संभव है?

मैं में जैसा प्रभाव दिखाने के लिए चाहते हैं:

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

लेकिन मैं इस try/except बॉयलरप्लेट के बिना यह चाहते हैं।

उत्तर

21

मुझे लगता है कि sys.last_value चाल करना चाहिए:

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',) 

आप और भी अधिक ऐसी बातें साथ मज़ा चाहते हैं, traceback module चेकआउट, लेकिन वह शायद IPython भीतर बहुत काम का हो नहीं होंगे।