urllib মডিউলটি request
করার উপায় পরিবর্তন করেছে Python 3-এ ফাংশন অ্যাক্সেস করা হয়েছে। এর মানে হল যে আপনি যদি পাইথন 2-এ যেভাবে “urlopen” ফাংশনটি উল্লেখ করার চেষ্টা করেন, আপনি “AttributeError:'module' অবজেক্টের কোনো অ্যাট্রিবিউট নেই 'urlopen'” ত্রুটির সম্মুখীন হবেন। .
এই নির্দেশিকাটি এই ত্রুটির অর্থ কী এবং কেন এটি উত্থাপিত হয়েছে সে সম্পর্কে কথা বলে৷ এটি এই ত্রুটির একটি উদাহরণ দিয়ে চলে যাতে আপনি এটি কীভাবে সমাধান করবেন তা শিখতে পারেন৷
৷AttributeError:'মডিউল' অবজেক্টের কোনো অ্যাট্রিবিউট নেই 'urlopen'
"urllib" মডিউল ইউআরএল খোলার এবং ওয়েবসাইট থেকে ডেটা পড়ার সাথে সম্পর্কিত অনেকগুলি ফাংশন প্রদান করে। এই লাইব্রেরি ব্যবহার করার জন্য সিনট্যাক্স পাইথন 2 এবং পাইথন 3 এর মধ্যে আলাদা।
পাইথন 2-এ, "urlopen" হল "urllib" মডিউলের অংশ। এর মানে আপনি urllib.urlopen ব্যবহার করে আপনার কোডে এটি আমদানি করতে পারেন। পাইথন 3-এ, "urlopen" হল "urllib" পদ্ধতির মধ্যে একটি "অনুরোধ" মডিউলের অংশ:
- পাইথন 2:urllib -> urlopen
- পাইথন 3:urllib -> অনুরোধ -> urlopen
"রিকোয়েস্ট" মডিউল হল যেখানে "urllib" প্যাকেজের অনেকগুলি ওয়েব রিকোয়েস্ট ফাংশন বান্ডিল করা হয়। অ্যাট্রিবিউট ত্রুটিগুলি উত্থাপিত হয় যখন আপনি একটি মডিউল থেকে একটি বৈশিষ্ট্য অ্যাক্সেস করার চেষ্টা করেন যাতে সেই বৈশিষ্ট্যটি নেই। এই ক্ষেত্রে, "urlopen" "urllib" মডিউলের অংশ নয়৷
৷একটি উদাহরণ দৃশ্য
একটি প্রোগ্রাম তৈরি করুন যা JSONPlaceholder নামে একটি পরিষেবা থেকে ডেটা পুনরুদ্ধার করে। এই পরিষেবাটি ডামি ডেটা সরবরাহ করে যা আপনি আপনার উদাহরণের জন্য ব্যবহার করতে পারেন৷
আইডি #2 সহ একটি একক পোস্ট পুনরুদ্ধার করুন। শুরু করতে, urllib মডিউল আমদানি করুন:
import urllib
এই বিবৃতিটি আপনাকে প্রোগ্রামের "urllib" মডিউলের মধ্যে থেকে ফাংশন ব্যবহার করতে দেয়।
81% অংশগ্রহণকারী বলেছেন যে তারা বুটক্যাম্পে যোগ দেওয়ার পরে তাদের প্রযুক্তিগত কাজের সম্ভাবনা সম্পর্কে আরও আত্মবিশ্বাসী বোধ করেছেন। আজই একটি বুটক্যাম্পের সাথে মিলিত হন৷
৷গড় বুটক্যাম্প গ্র্যাড একটি বুটক্যাম্প শুরু করা থেকে শুরু করে তাদের প্রথম চাকরি খোঁজা পর্যন্ত ক্যারিয়ারের পরিবর্তনে ছয় মাসেরও কম সময় কাটিয়েছে।
এরপর, "urlopen" ব্যবহার করে একটি অনুরোধ করুন। এটি আপনাকে JSONPlaceholder API-এ একটি এন্ডপয়েন্ট থেকে ডেটা পুনরুদ্ধার করতে দেবে:
data = urllib.urlopen("https://jsonplaceholder.typicode.com/posts/2") contents = data.read() print(as_json)
এই কোডটি JSONPlaceholder API-এ ID #2 সহ পোস্টের ডেটা পড়ে।
কোডটি প্রিন্ট স্টেটমেন্ট ব্যবহার করে কনসোলে JSON স্ট্রিং হিসাবে ফর্ম্যাট করা আমাদের অনুরোধের প্রতিক্রিয়া প্রিন্ট করে। কোড চালান এবং দেখুন কি হয়:
Traceback (most recent call last): File "main.py", line 4, in <module> data = urllib.urlopen("https://jsonplaceholder.typicode.com/posts/2") AttributeError: module 'urllib' has no attribute 'urlopen'
প্রোগ্রামটি একটি ত্রুটি ফেরত দেয়৷
সমাধান
আপনি "urlopen" পদ্ধতি অ্যাক্সেস করতে Python 2 সিনট্যাক্স ব্যবহার করছেন। "urlopen" পাইথন 3-এ "urllib" এর একটি বৈশিষ্ট্য নয়। আপনি "urllib" এর একটি বৈশিষ্ট্য হিসাবে "urlopen" উল্লেখ করেছেন যাতে প্রোগ্রামটি সঠিকভাবে চলতে ব্যর্থ হয়।
এই সমস্যাটি সমাধান করতে, "urllib" মডিউল থেকে "অনুরোধ" মডিউলটি আমদানি করুন। এই মডিউলটিতে "urlopen" পদ্ধতি রয়েছে:
import urllib.request
এরপর, কোডটি পরিবর্তন করুন যাতে আপনি JSONPlaceholder API থেকে ডেটা পুনরুদ্ধার করার সময় urllib.request মডিউলটি উল্লেখ করেন:
data = urllib.request.urlopen("https://jsonplaceholder.typicode.com/posts/2") contents = data.read().decode('utf-8') print(contents)
এই কোডটি API এন্ডপয়েন্টের বিষয়বস্তু পড়বে যা আমরা কল করি। আমাদের কোড রান করা যাক:
{ "userId": 1, "id": 2, "title": "qui est esse", "body": "est rerum tempore vitae\nsequi sint nihil reprehenderit dolor beatae ea dolores neque\nfugiat blanditiis voluptate porro vel nihil molestiae ut reiciendis\nqui aperiam non debitis possimus qui neque nisi nulla" }
আপনি decode()
ব্যবহার করে প্রাপ্ত প্রতিক্রিয়াটি ডিকোড করেছেন পদ্ধতি এটি করুন যাতে আপনি urlopen()
দ্বারা প্রত্যাবর্তিত মানগুলি পড়তে পারেন একটি স্ট্রিং হিসাবে পদ্ধতি৷
উপসংহার
"urlopen" ফাংশনটি পাইথন 3-এ "urllib" এর একটি বস্তু নয়। এই ফাংশনটি অ্যাক্সেস করতে, আপনার কোডে "urllib.request" আমদানি করুন এবং urllib.request.urlopen()
উল্লেখ করুন ফাংশন
এখন আপনার কাছে এই পাইথন ত্রুটিটি পেশাদারের মতো ঠিক করার জন্য প্রয়োজনীয় জ্ঞান রয়েছে!