بيثون C API:كيفية الحصول على تمثيل سلسلة من استثناء ؟

StackOverflow https://stackoverflow.com/questions/1001216

  •  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() أن تتحول هذه المجموعة إلى "ريال مدريد" الاستثناء الذي يمكن تهيئة نفسها مثل سلسلة كنت ترغب في ذلك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top