سؤال

أنا أستخدم mechanize وحدة لتنفيذ بعض استعلامات الويب من بايثون.أريد أن يكون برنامجي مقاومًا للأخطاء وأن يتعامل مع جميع أنواع الأخطاء (عناوين URL الخاطئة، والاستجابة 403/404) بأمان.ومع ذلك، لا يمكنني العثور في وثائق الميكنة على الأخطاء/الاستثناءات التي تطرحها للأخطاء المختلفة.

أنا فقط أسميها مع:

    self.browser = mechanize.Browser()
    self.browser.addheaders = [('User-agent', browser_header)]

    self.browser.open(query_url)
    self.result_page = self.browser.response().read()

كيف يمكنني معرفة الأخطاء/الاستثناءات التي يمكن طرحها هنا والتعامل معها؟

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

المحلول

$ perl -0777 -ne'print qq($1) if /__all__ = \[(.*?)\]/s' __init__.py | grep Error 

'BrowserStateError',
'ContentTooShortError',
'FormNotFoundError',
'GopherError',
'HTTPDefaultErrorHandler',
'HTTPError',
'HTTPErrorProcessor',
'LinkNotFoundError',
'LoadError',
'ParseError',
'RobotExclusionError',
'URLError',

أو:

>>> import mechanize
>>> filter(lambda s: "Error" in s, dir(mechanize))
['BrowserStateError', 'ContentTooShortError', 'FormNotFoundError', 'GopherError'
, 'HTTPDefaultErrorHandler', 'HTTPError', 'HTTPErrorProcessor', 'LinkNotFoundErr
or', 'LoadError', 'ParseError', 'RobotExclusionError', 'URLError']

نصائح أخرى

على الرغم من نشر هذا منذ وقت طويل، أعتقد أنه لا تزال هناك حاجة للإجابة على السؤال بشكل صحيح لأنه يظهر في نتائج بحث Google لهذا السؤال بالذات.

وأنا أكتب هذا، ميكانيكية (إصدار = (0، 1، 11، لا شيء، لا شيء)) في Python 265 يرفع urllib2.HTTPERror وبالتالي فإن حالة http متاحة من خلال التقاط هذا الاستثناء، على سبيل المثال:

import urllib2
try:
...  br.open("http://www.example.org/invalid-page")
... except urllib2.HTTPError, e:
...  print e.code
... 
404

لقد وجدت هذا في مستنداتهم:

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

لذلك أعتقد أنهم لا يثيرون أي استثناءات.يمكنك أيضًا البحث في الكود المصدري عن الفئات الفرعية للاستثناء ومعرفة كيفية استخدامها.

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