Albus
Albus личный блог
03 марта 2020, 13:27

Обработка таймаута на Питоне

Коллеги, помогите написать красиво кусочек кода. Обработка ситуации, когда ты заказал котировки с Финама, они не пришли, и ты пробуешь ещё раз. Сейчас я кривенько (чтобы описать задачу) написал так:

try: 
        txt=urlopen(url, timeout=20).readlines()
except timeout:
        print ("Exception!\nWait...")
        sleep (20)
        try:
                txt=urlopen(url, timeout=20).readlines()
        except timeout:
                print ("Exception!\nWait...")
                sleep (20)
                try:
                        txt=urlopen(url, timeout=20).readlines()
                except timeout:
                        print ("Котировки с Финама не пришли")
Как это написать красиво внутри цикла?
10 попыток. Если 10-я неудачная, выводим сообщение
print ("Котировки с Финама не пришли")
23 Комментария
  • Михаил
    03 марта 2020, 13:46
    def get_data(url, timeout, tries=0, max_tries=10):
      try:
        txt = urlopen(url, timeout=timeout).readlines()
      except TimeoutError:
        print(f«Retry {tries + 1} for {url}»)
        if tries + 1 <= max_tries:
           txt = get_data(url, timeout, tries + 1, max_tries)
        else:
          raise TimeoutError
      return txt
  • Пафос Респектыч
    03 марта 2020, 13:47
    И так сойдёт! Ты же трейдер, а не программист! ))
  • _sg_
    03 марта 2020, 13:58
    Eugene Logunov,
    не нужно одновременно и false и NULL использовать.
    Можно просто done = NULL
    исправить while
    и убрать
      if (data != NULL) {
        done = TRUE
  • siesta00
    03 марта 2020, 13:59
    рекурсия нужна )

Активные форумы
Что сейчас обсуждают

Старый дизайн
Старый
дизайн