अनुरोध - अगर आपको 404 मिल रहा है तो कैसे बताएं


139

मैं अनुरोध लाइब्रेरी का उपयोग कर रहा हूं और निम्नलिखित कोड के साथ उससे डेटा इकट्ठा करने के लिए एक वेबसाइट तक पहुंच रहा हूं:

r = requests.get(url)

जब अनुचित URL दर्ज किया जाता है और 404 त्रुटि वापस आती है, तो मैं त्रुटि परीक्षण जोड़ना चाहता हूं। यदि मैं जानबूझकर कोई अमान्य URL दर्ज करता हूं, जब मैं ऐसा करता हूं:

print r

मैंने इसे प्राप्त किया:

<Response [404]>

संपादित करें:

मैं जानना चाहता हूं कि उसके लिए कैसे परीक्षण करना चाहिए। ऑब्जेक्ट प्रकार अभी भी समान है। जब मैं करता हूं r.contentया r.text, मुझे बस एक कस्टम 404 पेज का HTML मिलता है।


2
दस्तावेज़ देखें: docs.python-requests.org/en/latest पहला पृष्ठ r.status_code
Udo Klein

जवाबों:


308

को देखो r.status_codeविशेषता :

if r.status_code == 404:
    # A 404 was issued.

डेमो:

>>> import requests
>>> r = requests.get('http://httpbin.org/status/404')
>>> r.status_code
404

यदि आप requestsत्रुटि कोड (4xx या 5xx) के लिए अपवाद उठाना चाहते हैं , तो कॉल करें r.raise_for_status():

>>> r = requests.get('http://httpbin.org/status/404')
>>> r.raise_for_status()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "requests/models.py", line 664, in raise_for_status
    raise http_error
requests.exceptions.HTTPError: 404 Client Error: NOT FOUND
>>> r = requests.get('http://httpbin.org/status/200')
>>> r.raise_for_status()
>>> # no exception raised.

आप बूलियन संदर्भ में प्रतिक्रिया वस्तु का परीक्षण भी कर सकते हैं; यदि स्थिति कोड त्रुटि कोड (4xx या 5xx) नहीं है, तो इसे 'सत्य' माना जाता है:

if r:
    # successful response

यदि आप अधिक स्पष्ट होना चाहते हैं, तो उपयोग करें if r.ok:


1
खैर लानत है कि गुस्सा आ रहा है। मेरी इच्छा है कि अतिरिक्त कॉल करने के लिए 2XX को छोड़कर किसी भी कारण से अनुरोध करने के लिए अनुरोध प्राप्त करने का एक तरीका था।
असफंद काजी

@AsfandQazi: आप 1xx या 3xx स्थिति कोड के लिए अपवाद क्यों उठाना चाहेंगे? वे त्रुटि की स्थिति नहीं हैं।
मार्टिज़न पीटर

2
1xx और 3xx को पुस्तकालय द्वारा पारदर्शी रूप से नियंत्रित किया जाना चाहिए (और हैं)। मैं विशेष रूप से 4xx त्रुटियों के बारे में बात कर रहा था। बेशक कभी-कभी आप एक 4xx प्रतिक्रिया पढ़ना चाह सकते हैं, इसलिए हमें इसे हर किसी पर नहीं थोपना चाहिए, लेकिन मैं चाहता हूं कि एक झंडा था जिसे आप .get()बाद में एक फ़ंक्शन को कॉल करने के बजाय पास कर सकते थे।
असफंद काजी

@AsfandQazi: यदि आप के लिए यह महत्वपूर्ण है तो अपने स्वयं के आवरण समारोह को लिखना तुच्छ है।
Martijn Pieters

1
यह थोड़ा अस्वाभाविक लगता है, यह सब है
असफंद काजी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.