Pygithub: كيفية العمل مع كائن GithubException

تم إنشاؤها على ٢٨ مارس ٢٠١٣  ·  14تعليقات  ·  مصدر: PyGithub/PyGithub

لدي سؤال حول كيفية العمل مع كائن GithubException

عينة من الرموز:
يحاول:
team = org.create_team (اسم الفريق ،
[] ،
"يدفع")؛
باستثناء GithubException كـ e:
طباعة (هـ)

عندما أطبع (هـ) أحصل على:

 422 {u'message': u'Validation Failed', u'errors': [{u'field': u'name', u'code': u'already_exists', u'resource': u'Team'}]}

ما أود أن أكون قادرًا على فعله هو الاطلاع على قائمة السمات ووظائف الأعضاء في كائن GithubException حتى أتمكن من سحب أشياء مختلفة للتحقق من أحداث معينة ... ولكن يمكنني العثور على هذا في وثائق واجهة برمجة تطبيقات PyGithub. ربما أحتاج فقط إلى فهم العلاقة بين PyGithub API و Github RESTful API بشكل أفضل.

من المصدر ، يبدو أن هناك خاصيتين لكائن GithubException:

https://github.com/jacquev6/PyGithub/blob/master/github/GithubException.py

data

وبجمع ذلك مع الإخراج ، يبدو أن 422 هي الحالة (ربما تم إرجاعها بواسطة API؟) ، والبيانات هي كائن قاموس (ربما يكون ترميز JSON الذي تم إرجاعه؟) ولكن هذه مجرد تخمينات.

يبدو أن المكان الوحيد الذي يحدث فيه GithubException في المصدر هو في Requester.py --- وهذا يميل إلى تأكيد تخميناتي.

هل يوجد في مكان ما في وثائق واجهة برمجة تطبيقات جيثب نفسها حيث يمكن للمرء أن يجد المفاتيح التي يتوقع المرء أن يجدها في كائن JSON ، أي في هذه الحالة "رسالة" و "أخطاء" ثم ضمن "أخطاء" و "حقل" و "كود" و "مورد"؟

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

team = False   # Sentinel to see if it succeeded or failed
try:
   team = org.create_team(teamName,
                     [],
                     "push");
   print(" team {0} created...".format(teamName),end='')
except GithubException as e:
   if (e.data['errors'][0]['code']=='already_exists'):
      print(" team {0} already exists...".format(teamName),end='') 
   else:
      print (e)

if (team != False):
   # do something with team...

هل أنا على الطريق الصحيح؟

question

التعليق الأكثر فائدة

أهلا،
أحاول التقاط استثناء:

github.GithubException.BadCredentialsException: 401 {'message': 'Bad credentials', 'documentation_url': 'https://developer.github.com/v3'}

الآن أحاول الوصول إليه مباشرة أتلقى الخطأ التالي:

AttributeError: type object 'GithubException' has no attribute 'BadCredentialsException'

كيف يمكنني التعرف على هذا الاستثناء المحدد وليس فقط استثناء عام من githubex؟

ال 14 كومينتر

لاحظ أن User @ jacquev6 تناول هذا جزئيًا في تعليق على المشكلة رقم 82.

هذا هو المسار الصحيح بالفعل. هنا بعض الملاحظات.

أنت محق بشأن status و data : إنها حالة HTTP وحمولة json التي تم فك تشفيرها. لقد فعلت ذلك بهذه الطريقة لأنه لم يكن لدي أي فكرة عن أنواع الأخطاء التي يمكن أن تحدث ، لذلك لم أتمكن من إنشاء خصائص محددة كما هو الحال في جميع الفئات الأخرى في PyGithub. (أعلم أن NamedUser يحتوي دائمًا على name ، لكن لا توجد مثل هذه المعرفة حول الاستثناءات / الأخطاء)

لذلك ، عندما يعرض Github API v3 حالة HTTP أعلى من 400 ، أرفع GithubException بهذه الحالة والحمولة.

عند التحقق من وثائق Github API v3 اليوم ، أرى بضع كلمات حول الأخطاء: http://developer.github.com/v3/#client -errors ولكن في الواقع هناك المزيد من الأخطاء المحتملة. على سبيل المثال ، أخطاء 404 للكائنات غير الموجودة ، و 401 للمصادقة السيئة ، وما إلى ذلك.

لذا ، ما يمكنني فعله الآن بعد أن عرفت الأخطاء أكثر قليلاً هو إنشاء فئات فرعية GithubException ، ورفعها عندما أرى نوعًا معينًا من الخطأ. سيسمح هذا للعميل بفئات خطأ معينة except ، والسماح للفئات الأخرى بالارتفاع في المكدس.

سأفعل ذلك في الإصدار 1.14.0 وأغتنم هذا كفرصة لتوثيقه في http://jacquev6.github.com/PyGithub/.

سأفعل ذلك في الفرع topic/SpecificExceptions

هذا يبدو رائعا. مرة أخرى ، شكرًا على كل عملك الشاق ، و
مهارات تصميم برامج ممتازة. كان المنتج غير عادي
مفيد ويسهل اكتشافه - ومعالجة ذلك سيجعل الأمر متساويًا
أفضل.

يوم الخميس ، 28 مارس 2013 الساعة 12:59 مساءً ، فنسنت جاك
إخطاراتgithub.com

سأفعل ذلك في موضوع الفرع / SpecificExcept ionshttps: //github.com/jacquev6/PyGithub/tree/topic/SpecificExceptions

-
قم بالرد على هذه الرسالة الإلكترونية مباشرة أو tHubhttps: //github.com/jacquev6/PyGithub/issues/152#issuecomment -15611026
.

فيل كونراد ، محاضر (SOE) * ، قسم علوم الكمبيوتر
جامعة كاليفورنيا ، سانتا باربرا
موعد مشترك: كلية الدراسات الإبداعية (www.ccs.ucsb.edu)

[email protected] ، www.cs.ucsb.edu/~pconrad

* SOE: تعيين هيئة التدريس بجامعة كاليفورنيا ، بما يتوافق مع الرتبة والوظيفة
الأمن لأستاذ مشارك ثابت

شكرًا \ o / من الجيد دائمًا كسب عميل راضٍ!

نعم ، أعتقد أنني سأمنحك زيادة - ضعف الراتب الذي أدفعه لك
الآن. :-)

يوم الخميس ، 28 مارس 2013 الساعة 1:33 مساءً ، فنسنت جاك
إخطاراتgithub.com

شكرًا \ o / من الجيد دائمًا كسب عميل راضٍ!

-
قم بالرد على هذه الرسالة الإلكترونية مباشرة أو tHubhttps: //github.com/jacquev6/PyGithub/issues/152#issuecomment -15612761
.

فيل كونراد ، محاضر (SOE) * ، قسم علوم الكمبيوتر
جامعة كاليفورنيا ، سانتا باربرا
موعد مشترك: كلية الدراسات الإبداعية (www.ccs.ucsb.edu)

[email protected] ، www.cs.ucsb.edu/~pconrad

* SOE: تعيين هيئة التدريس بجامعة كاليفورنيا ، بما يتوافق مع الرتبة والوظيفة
الأمن لأستاذ مشارك ثابت

هوهو ، سيكون ذلك أكبر وأصغر زيادة على الإطلاق!

ملاحظة لنفسي:

  • تحقق من اختبار github.tests.Organization.testMembers: هناك حالة 403
  • إضافة حالة اختبارية لـ exn محدد عند مصادقة غير صالحة مع رمز مميز

تم تسليم جزء من هذه المشكلة في 1.14.0 ، لكنني احتفظت به للإصدار 1.15.0 لإضافة بعض أنواع الاستثناءات المحددة الأخرى.

استثناء جديد محدد للإنشاء: HTTP 403 "وكيل مستخدم سيئ" (انظر # 160)

أقوم بإغلاق هذه المشكلة الآن ، لكنني سأستمر في إضافة أنواع معينة من الاستثناءات عندما أواجهها.

أهلا،
أحاول التقاط استثناء:

github.GithubException.BadCredentialsException: 401 {'message': 'Bad credentials', 'documentation_url': 'https://developer.github.com/v3'}

الآن أحاول الوصول إليه مباشرة أتلقى الخطأ التالي:

AttributeError: type object 'GithubException' has no attribute 'BadCredentialsException'

كيف يمكنني التعرف على هذا الاستثناء المحدد وليس فقط استثناء عام من githubex؟

أهلا،
أحاول التقاط استثناء:

github.GithubException.BadCredentialsException: 401 {'message': 'Bad credentials', 'documentation_url': 'https://developer.github.com/v3'}

الآن أحاول الوصول إليه مباشرة أتلقى الخطأ التالي:

AttributeError: type object 'GithubException' has no attribute 'BadCredentialsException'

كيف يمكنني التعرف على هذا الاستثناء المحدد وليس فقط استثناء عام من githubex؟

NicoHood استخدم github.BadCredentialsException - وهو أوضح من كود المصدر.

GithubException عبارة عن فئة بالإضافة إلى وحدة نمطية ، مسار الوحدة النمطية الكامل للفئة هو github.GithubException.GithubException ، والذي لا يمكنك استيراد BadCredentialsException منه. يتم تصدير جميع الاستثناءات عبر github ، لذا from github import BadCredentialsException سيعمل بشكل جيد.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات

القضايا ذات الصلة

nchammas picture nchammas  ·  3تعليقات

hsluoyz picture hsluoyz  ·  3تعليقات

hren-ron picture hren-ron  ·  6تعليقات

mlainez picture mlainez  ·  7تعليقات

psychemedia picture psychemedia  ·  5تعليقات