तो मुझे क्या करना (जैसे)पायथन सी एपीआई: अपवाद की स्ट्रिंग प्रस्तुति कैसे प्राप्त करें?
open("/snafu/fnord")
अजगर में
(और फ़ाइल मौजूद नहीं है), मैं एक ट्रैस बैक और संदेश
IOError: [Errno 2] No such file or directory: '/snafu/fnord'
मैं पायथन के साथ ऊपर स्ट्रिंग प्राप्त करना चाहते हैं मिल सी एपीआई (यानी, एक सी प्रोग्राम में एम्बेडेड एक पाइथन दुभाषिया)। मुझे इसे स्ट्रिंग के रूप में चाहिए, कंसोल पर आउटपुट नहीं।
PyErr_Fetch()
के साथ मैं अपवाद और मान का प्रकार ऑब्जेक्ट प्राप्त कर सकता हूं।
(2, 'No such file or directory', '/snafu/fnord')
वहाँ जानकारी मैं स्ट्रिंग के लिए अजगर दुभाषिया शो PyErr_Fetch()
से प्राप्त से एक आसान तरीका है: ऊपर के उदाहरण के लिए, मान एक टपल है? (एक जो प्रत्येक अपवाद प्रकार के लिए इस तरह के तारों को बनाने में शामिल नहीं है।)
दूसरा तर्क एक ट्यूपल है और एक स्ट्रिंग नहीं है। और मैं पहले ही PyErr_NormalizeException() को कॉल करता हूं। लेकिन PyErr_Fetch() एक अपवाद ऑब्जेक्ट नहीं देता है, केवल अपवाद प्रकार। इसलिए मुझे अपवाद ऑब्जेक्ट बनाना है, मुझे लगता है? और मैं निर्माता के लिए PyErr_Fetch() का दूसरा तर्क पास करता हूं? – ashcatch
ओह, बस मेरे कोड की जांच की और मैंने सभी मामलों में PyErr_NormalizeException() को कॉल नहीं किया। इसे कॉल करना, वास्तव में दूसरे तर्क को अपवाद ऑब्जेक्ट में बदल देता है। और उसे PyObject_Str() के साथ एक स्ट्रिंग में कनवर्ट करना मुझे वांछित परिणाम प्राप्त करता है। बहुत बहुत धन्यवाद। – ashcatch