سؤال

ما زلت جديدًا نسبيًا على Python ، لذلك إذا كان هذا سؤالًا واضحًا ، أعتذر.

سؤالي فيما يتعلق بمكتبة urllib2 ، وهي وظيفة urlopen. حاليًا أستخدم هذا لتحميل كمية كبيرة من الصفحات من خادم آخر (فهي جميعها على نفس المضيف البعيد) ولكن يتم قتل البرنامج النصي بين الحين والآخر عن طريق خطأ في مهلة (أفترض أن هذا من الطلبات الكبيرة).

هل هناك طريقة للحفاظ على البرنامج النصي بعد مهلة؟ أود أن أكون قادرًا على جلب جميع الصفحات ، لذلك أريد نصًا سيستمر في المحاولة حتى يحصل على صفحة ، ثم ينتقل.

في ملاحظة جانبية ، هل سيبقي الاتصال بالاتصال لمساعدة الخادم؟

هل كانت مفيدة؟

المحلول

في المرة القادمة التي يحدث فيها الخطأ ، لاحظ رسالة الخطأ. سيخبرك السطر الأخير بنوع الاستثناء. على سبيل المثال ، قد يكون urllib2.HTTPError. بمجرد أن تعرف نوع الاستثناء الذي أثير ، يمكنك التقاطه في try...except الكتلة. فمثلا:

import urllib2
import time

for url in urls:
    while True:
        try:
            sock=urllib2.urlopen(url)
        except (urllib2.HTTPError, urllib2.URLError) as err:
            # You may want to count how many times you reach here and
            # do something smarter if you fail too many times.
            # If a site is down, pestering it every 10 seconds may not
            # be very fruitful or polite.
            time.sleep(10)
        else:              
            # Success  
            contents=sock.read()
            # process contents
            break                # break out of the while loop

نصائح أخرى

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top