मेरी पृष्ठभूमि C # में है और मैंने हाल ही में पायथन में प्रोग्रामिंग शुरू की है। जब एक अपवाद को फेंक दिया जाता है तो मैं आमतौर पर इसे दूसरे अपवाद में लपेटना चाहता हूं जो अधिक जानकारी जोड़ता है, जबकि अभी भी पूर्ण स्टैक ट्रेस दिखा रहा है। यह सी # में काफी आसान है, लेकिन मैं इसे पायथन में कैसे करूं?
उदाहरण के लिए। C # में मैं ऐसा कुछ करूंगा:
try
{
ProcessFile(filePath);
}
catch (Exception ex)
{
throw new ApplicationException("Failed to process file " + filePath, ex);
}
अजगर में मैं कुछ ऐसा ही कर सकता हूं:
try:
ProcessFile(filePath)
except Exception as e:
raise Exception('Failed to process file ' + filePath, e)
... लेकिन यह आंतरिक अपवाद का ट्रेसबैक खो देता है!
संपादित करें: मैं दोनों अपवाद संदेशों को देखना चाहता हूं और दोनों निशान मिटाते हैं और दोनों को सहसंबंधित करते हैं। यही है, मैं आउटपुट में देखना चाहता हूं कि अपवाद एक्स यहां हुआ और फिर अपवाद वाई वहां - जैसा कि मैं सी # में होगा। क्या पायथन 2.6 में यह संभव है? ऐसा लगता है कि मैं अब तक सबसे अच्छा कर सकता हूं (ग्लेन मेनार्ड के जवाब के आधार पर):
try:
ProcessFile(filePath)
except Exception as e:
raise Exception('Failed to process file' + filePath, e), None, sys.exc_info()[2]
इसमें संदेश और ट्रेसबैक दोनों शामिल हैं, लेकिन यह नहीं दिखाता है कि ट्रेसबैक में कौन सा अपवाद हुआ।