2016-09-28 12 views
2

質問:testurl1、testurl2、およびtesturl3という3つのURLがあります。私は最初にtesturl1を試してみたいと思います。もし404エラーが出たら、testurl2を試してください。これを達成する方法は?これまで私は以下で試してみましたが、それは2つのURLだけで動作し、3番目のURLのサポートを追加する方法は?2つ以上のURLのHTTPエラーをチェックする方法は?

from urllib2 import Request, urlopen 
from urllib2 import URLError, HTTPError 

def checkfiles(): 
    req = Request('http://testurl1') 
    try: 
     response = urlopen(req) 
     url1=('http://testurl1') 

    except HTTPError, URLError: 
     url1 = ('http://testurl2') 

    print url1 
    finalURL='wget '+url1+'/testfile.tgz' 

    print finalURL 

checkfiles() 
+0

レスポンスコードを確認してください。それが '404'ならば、あなたが必要とすることをしてください。 –

+0

nah、urllibは404のHTTPErrorを生成し、404の応答は生成しません – wim

答えて

2

ループのための昔ながらのためのもう一つの仕事:

for url in testurl1, testurl2, testurl3 
    req = Request(url) 
    try: 
     response = urlopen(req) 
    except HttpError as err: 
     if err.code == 404: 
      continue 
     raise 
    else: 
     # do what you want with successful response here (or outside the loop) 
     break 
else: 
    # They ALL errored out with HTTPError code 404. Handle this? 
    raise err 
0

うーん、多分このような何か?

from urllib2 import Request, urlopen 
from urllib2 import URLError, HTTPError 

def checkfiles(): 
    req = Request('http://testurl1') 
    try: 
     response = urlopen(req) 
     url1=('http://testurl1') 

    except HTTPError, URLError: 
     try: 
      url1 = ('http://testurl2') 
     except HTTPError, URLError: 
      url1 = ('http://testurl3') 
    print url1 
    finalURL='wget '+url1+'/testfile.tgz' 

    print finalURL 

checkfiles() 
関連する問題