即使使用“try and except”子句,仍会出现HTTP404错误

时间:2015-02-05 02:43:09

标签: python python-requests

我需要访问一个url,如果它给我一个HTTPError,我需要等待五分钟再试一次(这适用于这个特定的网站)。看起来代码没有识别except子句,它仍然立即给我一个HTTPError(不等待5分钟)。

import urllib2, datetime, re,os, requests
from time import sleep
import time 
from dateutil.relativedelta import relativedelta
from requests.exceptions import HTTPError, ConnectionError
from bs4 import BeautifulSoup

try:
        resp = requests.get(url)


except HTTPError:
        while True:
                print "Wait."
                time.sleep(305)
            resp = requests.get(url)


except ConnectionError:
        while True:
                print "Wait."
                time.sleep(305)
        resp = requests.get(url)

2 个答案:

答案 0 :(得分:0)

您将此resp = requests.get(url)放入try/except块,但在except后再次放置相同的内容。如果有什么东西抛出了错误而你把它放在except之后,它会再次抛出该错误。

while True:
    try:
        resp = requests.get(url)
    except HTTPError:
        print "Wait."
        time.sleep(305)
        continue #pass the codes after this block
    except ConnectionError:
        print "Wait."
        time.sleep(305) 
        continue #pass the codes after this block
    else:
        break

基本上直到你的网址正确响应,它会一次又一次地运行同样的东西。

答案 1 :(得分:0)

在您的except块中,您有:

resp = requests.get(url)

这不受try块的保护,因此会抛出错误。你必须稍微重新安排你的代码:

while True:
    try:
        resp = requests.get(url)

    except HTTPError:
        print "Wait."
        time.sleep(305)    

    except ConnectionError:
        print "Wait."
        time.sleep(305)

    else: break

它现在是一个无限循环。当连接失败时,循环就会继续。当它成功时,循环退出。