تتبع/مصيدة BPT عند الاتصال بـ urllib.urlopen
سؤال
لسبب ما، أتلقى خطأ في اعتراض التتبع/BPT عند الاتصال urllib.urlopen
.لقد حاولت على حد سواء urllib
و urllib2
بنتائج متطابقة.إليك الكود الذي يلقي الخطأ:
def get_url(url):
from urllib2 import urlopen
if not url or not url.startswith('http://'): return None
return urlopen(url).read() # FIXME!
يجب أن أضيف أن هذا الرمز يعمل على خادم ويب CherryPy مع web.py.
طلب شخص ما التتبع.لسوء الحظ، لا يوجد شيء. Trace/BPT trap
يتم إخراجه إلى المحطة وتنتهي العملية.على سبيل المثال
dloewenherz@andros project $ sudo ./index.py 80
http://0.0.0.0:80/
# Here I visit the page which contains the get_url(url) method
Trace/BPT trap
dloewenherz@andros project $
يحرر:أستخدم OS X 10.6.2 وweb.py 0.33 وPython 2.6.2 وCherryPy 3.1.2.
المحلول
وإضافة الأسطر التالية إلى الجزء العلوي من الملف الرئيسي حل المشكلة:
import urllib2
urllib2.install_opener(urllib2.build_opener())
وبعبارة أخرى، فإنه لا يكفي لاستيراد وحدة urllib2 لكن تحتاج فعلا إلى إنشاء أولى مبارياته في الموضوع الرئيسي.
نصائح أخرى
هل تقوم بتشغيل هذا تحت OS X 10.6؟من الواضح أن الخيوط والوحدات النمطية المستوردة لأول مرة لا تعمل معًا بشكل جيد هناك.معرفة ما إذا كان لا يمكنك استيراد urllib2 خارج الموضوع؟
وهناك المزيد من التفاصيل في الموضوع التالي: مصيدة التتبع/BPT مع وحدة خيوط Python
سأحاول إما نقل استيراد urllib إلى الجزء العلوي من نفس الملف، أو، نظرًا لأنه يبدو أن هناك مشكلة فقط في استيراد وحدة نمطية لأول مرة في سلسلة رسائل، قم باستيرادها في مكان آخر أيضًا، كما هو الحال في نفس الملف الملف باعتباره وظيفتك الرئيسية ().
يحرر: ما هي إصدارات OS X وPython وCherryPy وweb.py التي تستخدمها؟أنا أستخدم OS X 10.5.8 وPython 2.6 وCherryPy 3.1.2 وweb.py 0.33 ولا يمكنني إعادة إنتاج مشكلتك باستخدام الكود أدناه:
import web
urls = (
'/', 'index'
)
app = web.application(urls, globals())
class index:
def GET(self):
from urllib2 import urlopen
return urlopen("http://google.se/").read()
if __name__ == "__main__": app.run()
$ sudo python index.py 80
http://0.0.0.0:80/
127.0.0.1:59601 - - [08/Nov/2009 09:46:40] "HTTP/1.1 GET /" - 200 OK
127.0.0.1:59604 - - [08/Nov/2009 09:46:40] "HTTP/1.1 GET /extern_js/f/CgJzdhICc2UgACswCjhBQB0sKzAOOAksKzAYOAQsKzAlOMmIASwrMCY4BSwrMCc4Aiw/dDWkSd2jmF8.js" - 404 Not Found
127.0.0.1:59601 - - [08/Nov/2009 09:46:40] "HTTP/1.1 GET /logos/elmo-hp.gif" - 404 Not Found
127.0.0.1:59601 - - [08/Nov/2009 09:46:40] "HTTP/1.1 GET /images/nav_logo7.png" - 404 Not Found
هل هذا الرمز كافٍ لإعادة إنتاج المشكلة من جانبك؟إذا لم يكن الأمر كذلك، فأنا بحاجة إلى مزيد من المعلومات حتى أتمكن من المساعدة.