2008-09-30 18 views
6

मैं पाइथन से कुछ वेब क्वेरी निष्पादित करने के लिए mechanize मॉड्यूल का उपयोग कर रहा हूं। मैं चाहता हूं कि मेरा प्रोग्राम त्रुटि-लचीला हो और सभी प्रकार की त्रुटियों (गलत यूआरएल, 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() 

मैं कैसे पता कर सकते हैं त्रुटियों/अपवाद यहाँ फेंक दिया जा सकता है और उन्हें संभाल?

उत्तर

8
$ 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'] 
+0

निकोलस बताते हैं, मशीनीकरण अक्सर urllib2 अपवादों का प्रचार करता है - देखें [अलेक्जेंडर्स urllib2 दस्तावेज़ से लिंक करें] (http://docs.python.org/lib/module-urllib2.html) –

+0

@ जेम्स ब्रॉडहेड: ऊपर दिए गए 'HTTPError' * * 'urllib2.HTTPError' है। आपको 'urllib2' को स्पष्ट रूप से आयात करने की आवश्यकता नहीं है। 'mechanize'' urllib2' इंटरफ़ेस का सुपरसेट प्रदान करता है। – jfs

+0

आप स्पष्ट रूप से urllib2 को संदर्भित करने के बारे में सही नहीं हैं - मेरा बिंदु सिर्फ दस्तावेज़ीकरण से लिंक करना था। –

1

मैं उनके डॉक्स में इस पाया:

एक अंतिम ध्यान दें चीज नहीं हैं कि है कुछ कैच-ऑल नंगे को छोड़कर: मॉड्यूल में बयान है, जो वहाँ अप्रत्याशित बुरा इनपुट को संभालने के लिए कर रहे हैं अपने कार्यक्रम को दुर्घटनाग्रस्त किए बिना। यदि यह होता है, तो यह मशीनी में एक बग है, इसलिए कृपया मुझे चेतावनी टेक्स्ट मेल करें।

तो मुझे लगता है कि वे कोई अपवाद नहीं उठाते हैं। आप अपवाद उप-वर्गों के लिए स्रोत कोड भी खोज सकते हैं और देख सकते हैं कि उनका उपयोग कैसे किया जाता है।

+1

मुझे यकीन है तुम सही हो नहीं कर रहा हूँ क्योंकि मशीनीकरण अंतर्निहित urllib2 से अपवाद प्रचार करने के लिए लगता है –

+0

कॉल उस मामले में, urllib2 अपवाद बहुत अच्छी तरह से प्रलेखित रहे हैं: http://docs.python.org/lib/module- urllib2.html –

3

इस एक लंबे समय पहले तैनात किया गया है, मुझे लगता है कि वहाँ अभी भी सही ढंग से सवाल का जवाब देने के बाद से यह यह बहुत ही प्रश्न के लिए गूगल के खोज परिणामों में आता है की जरूरत है ।

मैं इस बारे में के रूप में, मशीनीकरण (संस्करण = (0, 1, 11, कोई नहीं, कोई नहीं)) पायथन में 265 urllib2.HTTPError, जैसे को जन्म देती है और इतने http स्थिति इस अपवाद को पकड़ने के माध्यम से उपलब्ध है:

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

-1: 'मशीनी' 'urllib2' इंटरफ़ेस का सुपरसेट प्रदान करता है। 'mechanize.HTTPError urllib2 है। एचटीटीपी त्रुटि '। – jfs