অনুরোধগুলি - আপনি কীভাবে 404 পাচ্ছেন তা বলবেন


139

আমি অনুরোধ গ্রন্থাগারটি ব্যবহার করছি এবং নিম্নলিখিত কোড সহ এটি থেকে ডেটা সংগ্রহ করার জন্য একটি ওয়েবসাইট অ্যাক্সেস করছি:

r = requests.get(url)

যখন কোনও অনুপযুক্ত URL টি প্রবেশ করা হয় এবং 404 ত্রুটি ফিরে আসে তখন আমি ত্রুটি পরীক্ষার যুক্ত করতে চাই। আমি যদি ইচ্ছাকৃতভাবে একটি অবৈধ URL প্রবেশ করি, যখন আমি এটি করি:

print r

বুঝতে পেরেছি:

<Response [404]>

সম্পাদনা করুন:

আমি এটির জন্য কীভাবে পরীক্ষা করব তা জানতে চাই। অবজেক্টের ধরণ এখনও একইরকম। আমি যখন r.contentবা করি r.text, তখন আমি কেবল একটি কাস্টম 404 পৃষ্ঠার এইচটিএমএল পাই।


2
: ডকুমেন্টেশন তাকান docs.python-requests.org/en/latest r.status_code তাকান প্রথম পৃষ্ঠার রাজ্যের
Udo ক্লেইন

উত্তর:


307

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 ব্যতীত যে কোনও কারণের জন্য অনুরোধ পাওয়ার উপায় ছিল get
আসফান্দ কাজী

@ আসফ্যান্ডকাজী: আপনি কেন 1 xxx বা 3xx স্থিতি কোডের জন্য একটি ব্যতিক্রম বাড়াতে চান? এগুলি ত্রুটির শর্ত নয়।
মার্টিজন পিটারস

2
1xx এবং 3xx লাইব্রেরির মাধ্যমে স্বচ্ছভাবে পরিচালনা করা উচিত (এবং হয়)। আমি 4XX ত্রুটি সম্পর্কে বিশেষভাবে কথা বলছিলাম। অবশ্যই কখনও কখনও আপনি 4XX প্রতিক্রিয়া পড়তে চাইতে পারেন তাই আমাদের এটি সবার উপরে চাপিয়ে দেওয়া উচিত নয়, তবে আমি আশা করি যে কোনও পতাকা পরে আপনি .get()কোনও ফাংশন কল করার পরিবর্তে প্রেরণ করতে পারতেন ।
আসফান্দ কাজী

@ আসফান্ডকাজী: আপনার নিজের র‍্যাপার ফাংশনটি যদি আপনার কাছে গুরুত্বপূর্ণ হয় তবে এটি লিখতে তুচ্ছ।
মার্টিজন পিটারস

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.