بيثون C API:كيفية الحصول على تمثيل سلسلة من استثناء ؟
-
05-07-2019 - |
سؤال
إذا كنت تفعل (على سبيل المثال)
open("/snafu/fnord")
في بيثون (الملف غير موجود), أحصل على traceback و الرسالة
IOError: [Errno 2] No such file or directory: '/snafu/fnord'
أود الحصول على السلسلة أعلاه مع بيثون C API (أي مترجم بايثون المضمنة في برنامج C).أنا في حاجة إليها كسلسلة ، إخراج وحدة التحكم.
مع PyErr_Fetch()
أنا يمكن الحصول على نوع الكائن الاستثناء و قيمة.المثال القيمة tuple:
(2, 'No such file or directory', '/snafu/fnord')
هل هناك طريقة سهلة من المعلومات التي أحصل عليها من PyErr_Fetch()
إلى سلسلة مترجم بايثون العروض ؟ (واحد التي لا تنطوي على بناء مثل هذه السلاسل لكل نوع الاستثناء نفسك.)
المحلول
أعتقد أن الثعبان الاستثناءات يتم طباعتها عن طريق تشغيل "str()" على الاستثناء سبيل المثال ، والتي سوف إعادة تنسيق سلسلة كنت مهتما في.يمكنك الحصول على هذا من ج عن طريق الاتصال PyObject_Str()
الأسلوب هو موضح هنا:
https://docs.python.org/c-api/object.html
حظا سعيدا!
تحديث: أنا مشوشة قليلا لماذا العنصر الثاني الذي عاد لك من قبل PyErr_Fetch()
هو سلسلة.تخميني هو أنك تلقي "unnormalized استثناء" و تحتاج إلى استدعاء PyErr_NormalizeException()
أن تتحول هذه المجموعة إلى "ريال مدريد" الاستثناء الذي يمكن تهيئة نفسها مثل سلسلة كنت ترغب في ذلك.