سؤال

وأنا استيراد حدة مما يثير الخطأ التالي في بعض الشروط:     RuntimeError: pyparted يتطلب الوصول الجذر

وأنا أعلم أنني يمكن أن تحقق لمجرد وصول الجذر قبل الاستيراد، ولكن أود أن أعرف كيفية التقاط هذا النوع spesific الخطأ عن طريق محاولة / باستثناء بيان للرجوع إليها في المستقبل. هل هناك أي طريقة للتمييز بين هذه RuntimeError وغيرها من الجهات التي يمكن أن تثار؟

هل كانت مفيدة؟

المحلول

<اقتباس فقرة>   

وأنا أعلم أنني يمكن أن تحقق لمجرد وصول الجذر قبل الاستيراد، ولكن أود أن أعرف كيفية التقاط هذا النوع spesific الخطأ عن طريق محاولة / باستثناء بيان للرجوع إليها في المستقبل. هل هناك أي طريقة للتمييز بين هذه RuntimeError وغيرها من الجهات التي يمكن أن تثار؟

إذا كان سبب الخطأ بسبب حالة معينة، ثم أعتقد أن أسهل طريقة للقبض على الخطأ هو اختبار للشرط، ويمكنك رفع خطأ أكثر تحديدا نفسك. بعد كل 'خطأ' موجود قبل أن يتم طرح الخطأ، لأنه في هذه الحالة لها مشكلة مع البيئة.

وأنا أتفق مع تلك المذكورة أعلاه - مطابقة النص على خطأ هو نوع من مخيف

.

نصائح أخرى

ويمكنك التحقق من سمات استثناء لتمييزها عن استثناءات RuntimeError المحتملة الأخرى. على سبيل المثال، إعادة رفع الخطأ إذا كان لا يطابق نص رسالة محددة مسبقا.

    try:
        import pypatred
    except RuntimeError,e:
        if e.message == 'RuntimeError: pyparted requires root access':
            return 'pyparted - no root access'
        raise

وبطبيعة الحال، مقارنة النص مباشرة هي مجرد مثال، هل يمكن البحث عن سلاسل فرعية شملت أو التعابير العادية.

وتجدر الإشارة إلى أن السمة .message الاستثناءات هي إهمال بدءا بيثون 2.6 . يمكنك العثور على النص في .args، عادة args[0].

<اقتباس فقرة>   

و... ل2.6، يتم إهمال السمة message لصالح السمة args.

try:
    import pyparted
except RuntimeError:
    print('RuntimeError is raised')
    raise

معالجة الاستثناء في البرنامج التعليمي .

وهذا الوضع يجب أن ينتج ImportError في بلدي رأي. ويمكنك أن تفعل ذلك بنفسك:

try:
    import pyparted
except RuntimeError as e:
    raise ImportError(e)

نعم.

   try:
        import module
   except RuntimeError:
         pass
يتم تفسير

والواردات وأي بيان آخر، فهي ليست خاصة. هل يمكن أن تفعل ل

if condition:
     import module
try:
   import ...
except RuntimeError:
   # Do something

RuntimeError أثار عندما تم الكشف عن خطأ فليس " ر سقوط في أي من الفئات الأخرى

def foo():
   try:
      foo()
   except RuntimeError, e:
      print e
      print " Runtime Error occurred due to exceeded maximum recursion depth "

وهذه هي الطريقة التي سنقوم قبض على RuntimeError الناجمة عن الحد العودية تجاوزت في بيثون

وإذا كنت ترغب في استدعاء الدالة على حد العودية يمكنك القيام بما يلي

import sys
def foo():
     try:
        foo()
     except RuntimeError, e:
        sys.setrecursionlimit(1200)
        foo()

ولكن دائما هو غاية غير المستحسن لتغيير الحد العودية، ولكن يسمح للتغيرات صغيرة جدا في الحد العودية

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