urllib मॉड्यूल ने request
. के तरीके को बदल दिया फ़ंक्शन को पायथन 3 में एक्सेस किया गया है। इसका मतलब यह है कि यदि आप "urlopen" फ़ंक्शन को उसी तरह से संदर्भित करने का प्रयास करते हैं जैसे आप पायथन 2 में करते हैं, तो आप "एट्रीब्यूट एरर:'मॉड्यूल' ऑब्जेक्ट में कोई विशेषता नहीं है 'urlopen'" त्रुटि का सामना करेंगे। .
यह मार्गदर्शिका इस बारे में बात करती है कि इस त्रुटि का क्या अर्थ है और इसे क्यों उठाया गया है। यह इस त्रुटि के एक उदाहरण के माध्यम से चलता है ताकि आप इसे हल करना सीख सकें।
विशेषता त्रुटि:'मॉड्यूल' ऑब्जेक्ट में कोई विशेषता नहीं है 'urlopen'
"urllib" मॉड्यूल URL खोलने और वेबसाइटों से डेटा पढ़ने से संबंधित कई कार्य प्रदान करता है। इस लाइब्रेरी का उपयोग करने का सिंटैक्स पायथन 2 और पायथन 3 के बीच भिन्न है।
पायथन 2 में, "urlopen" "urllib" मॉड्यूल का हिस्सा है। इसका मतलब है कि आप urllib.urlopen का उपयोग करके इसे अपने कोड में आयात कर सकते हैं। पायथन 3 में, "urlopen" "urllib" विधि के भीतर "अनुरोध" मॉड्यूल का हिस्सा है:
- पायथन 2:urllib -> urlopen
- पायथन 3:urllib -> अनुरोध -> urlopen
"अनुरोध" मॉड्यूल वह जगह है जहां "urllib" पैकेज में कई वेब अनुरोध कार्य बंडल किए जाते हैं। जब आप किसी ऐसे मॉड्यूल से किसी विशेषता तक पहुँचने का प्रयास करते हैं, जिसमें वह विशेषता नहीं होती है, तो विशेषताएँ उत्पन्न होती हैं। इस मामले में, "urlopen" "urllib" मॉड्यूल का हिस्सा नहीं है।
एक उदाहरण परिदृश्य
एक प्रोग्राम बनाएं जो JSONPlaceholder नामक सेवा से डेटा पुनर्प्राप्त करता है। यह सेवा डमी डेटा प्रदान करती है जिसका उपयोग आप अपने उदाहरण के लिए कर सकते हैं।
#2 आईडी के साथ एक पोस्ट प्राप्त करें। शुरू करने के लिए, urllib मॉड्यूल आयात करें:
यह कथन आपको प्रोग्राम में "urllib" मॉड्यूल के भीतर से फ़ंक्शंस का उपयोग करने देता है।
81% प्रतिभागियों ने कहा कि बूटकैंप में भाग लेने के बाद उन्हें अपनी तकनीकी नौकरी की संभावनाओं के बारे में अधिक आत्मविश्वास महसूस हुआ। आज ही एक बूटकैंप से मिलान करें।
बूटकैंप शुरू करने से लेकर अपनी पहली नौकरी खोजने तक, औसत बूटकैंप ग्रेड ने करियर संक्रमण में छह महीने से भी कम समय बिताया।
इसके बाद, "urlopen" का उपयोग करके एक अनुरोध करें। यह आपको JSONPlaceholder API पर एक समापन बिंदु से डेटा पुनर्प्राप्त करने देगा:
डेटा =urllib.urlopen("https://jsonplaceholder.typicode.com/posts/2") सामग्री =data.read()print(as_json)
यह कोड JSONPlaceholder API पर आईडी #2 के साथ पोस्ट के लिए डेटा पढ़ता है।
कोड हमारे अनुरोध से प्रतिक्रिया को प्रिंट करता है, एक JSON स्ट्रिंग के रूप में स्वरूपित, एक प्रिंट स्टेटमेंट का उपयोग करके कंसोल पर। कोड चलाएँ और देखें कि क्या होता है:
ट्रेसबैक (सबसे हालिया कॉल अंतिम):फ़ाइल "main.py", पंक्ति 4, <मॉड्यूल> डेटा में =urllib.urlopen ("https://jsonplaceholder.typicode.com/posts/2") विशेषता त्रुटि:मॉड्यूल 'urllib' में कोई विशेषता नहीं है 'urlopen'
प्रोग्राम एक त्रुटि देता है।
समाधान
आप "urlopen" विधि तक पहुँचने के लिए Python 2 सिंटैक्स का उपयोग कर रहे हैं। "urlopen" Python 3 में "urllib" की विशेषता नहीं है। आप "urlopen" को "urllib" की विशेषता के रूप में संदर्भित करते हैं, इसलिए प्रोग्राम ठीक से चलने में विफल रहता है।
इस समस्या को हल करने के लिए, "urllib" मॉड्यूल से "अनुरोध" मॉड्यूल आयात करें। इस मॉड्यूल में "urlopen" विधि शामिल है:
urllib.request आयात करें
इसके बाद, कोड बदलें ताकि जब आप JSONPlaceholder API से डेटा पुनर्प्राप्त करें तो आप urllib.request मॉड्यूल का संदर्भ लें:
डेटा =urllib.request.urlopen("https://jsonplaceholder.typicode.com/posts/2") सामग्री =data.read().decode('utf-8')print(contents)
यह कोड एपीआई एंडपॉइंट की सामग्री को पढ़ेगा जिसे हम कहते हैं। आइए अपना कोड चलाएं:
{ "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 poro वेल निहिल मोलेस्टिया यूट रीसीएंडिस\nqui aperiam non debitis possimus qui neque nisi nula"}
आपने decode()
. का उपयोग करके प्राप्त होने वाली प्रतिक्रिया को डीकोड किया है तरीका। ऐसा करें ताकि आप urlopen()
. द्वारा दिए गए मानों को पढ़ सकें एक स्ट्रिंग के रूप में विधि।
निष्कर्ष
पायथन 3 में "urlopen" फ़ंक्शन "urllib" का ऑब्जेक्ट नहीं है। इस फ़ंक्शन तक पहुंचने के लिए, अपने कोड में "urllib.request" आयात करें और urllib.request.urlopen()
का संदर्भ लें। समारोह।
अब आपके पास एक पेशेवर की तरह इस पायथन त्रुटि को ठीक करने के लिए आवश्यक ज्ञान है!