Как избежать нескольких попыток, кроме блоков Python - PullRequest
0 голосов
/ 19 декабря 2018

У меня есть некоторый код, который я написал, который загружает изображения с веб-сайта.То, как он работает в настоящее время, нужно угадать, какое расширение файла будет для URL, с которого оно будет загружаться.Блок кода, который делает это, выглядит следующим образом:

for imageLink in imageLinks:


  try:
      urllib.request.urlretrieve(imageLink + ".png", str(threadName) + "/" + str(count) + ".png")
  except:
      try:
          urllib.request.urlretrieve(imageLink + ".jpg",str(threadName) + "/" + str(count) + ".png")
      except:
          try:
                urllib.request.urlretrieve(imageLink + ".gif",str(threadName) + "/" + str(count) + ".gif")
          except:
                urllib.request.urlretrieve(imageLink + ".webm",str(threadName) + "/" + str(count) + ".webm")

В нынешнем виде код полагается на сбой, чтобы попробовать что-то еще.Я хотел знать, есть ли у них возможность использовать эту функциональность, а просто выглядеть лучше.Эти методы будут выдавать идентичные ошибки, если они потерпят неудачу, поэтому я хочу просто последовательно пройти их, пока один из них не заработает

Ответы [ 2 ]

0 голосов
/ 19 декабря 2018

Вы можете использовать блок try / exception внутри функции и возвращать None, если элемент управления переходит к оператору исключения.Вы можете оптимизировать цикл for в соответствии со своими потребностями.Один пример здесь:

def get_url(link1, link2):
try:
    requestData = urllib.request.urlretrieve(link1, link2)
except:
    return None
return requestData

for imageLink in imageLinks:
data = urllib.request.urlretrieve(imageLink + ".png", str(threadName) + "/" + str(count) + ".png")
if data == None:
    data = urllib.request.urlretrieve(imageLink + ".jpg",str(threadName) + "/" + str(count) + ".png")
    if data == None:
        data = urllib.request.urlretrieve(imageLink + ".gif",str(threadName) + "/" + str(count) + ".gif")
        if data == None:
            urllib.request.urlretrieve(imageLink + ".webm",str(threadName) + "/" + str(count) + ".webm")
0 голосов
/ 19 декабря 2018
for ext in ('.png', '.jpg', '.gif', '.webm'):
    try:
        urllib.request.urlretrieve(imageLink + ext, str(threadName) + "/" + str(count) + ext)
        break
    except:
        pass
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...