2016-06-30 2 views
0

Я вызываю функцию, которая вызовет исключение, если веб-страница еще не загружена. Я хочу подождать 2 секунды, а затем повторить попытку до загрузки страницы.Обработать исключение в цикле while

Я стараюсь это:

while(True): 
    try: 
     some_funciont() 
     break 
    except: 
     time.sleep(2) 

но сбегает после первой итерации.

Как избежать, если исключение не поднято?

+0

Потому что вы, вероятно, вызывая его на действительном веб-страницы , –

+0

это будет выполняться только независимо от того, какое значение возвращает '' some_function() ''. –

+1

@ Ev.Kounis: Если исключение не создано. –

ответ

4

Попробуйте что-то вроде этого:

def some_function(){ 
    try: 
     #logic to load the page. If it is successful, it will not go to except. 
     #hence set flag = True 
     #return flag 
    except: 
     #will come to this clause when page will throw error. set flag = False 
     #return Flag 
    } 

while(True) 
    if some_function(): 
     break 
    else: 
     time.sleep(2) 
     continue 
+0

@Ev. Kounis: - Видел ваше предложение. Но я думаю, что флаг == True не является внутренним. Даже если он бесконечен, он будет разбиваться на основе if, если внутри. Следовательно, проверка флага сделает часть! ваши предложения plz! – Deca

+0

true, но тогда зачем его инициализировать? –

+0

наверху ... самая верхняя строка инициализирует флаг! – Deca

-1

Это потому, что если вы сломаетесь, он вырвется из цикла while. Избавьтесь от перерыва и отступов, кроме.

while(True): 
    try: 
     some_function() 
     if check_loaded: 
      break 
    except: 
     time.sleep(2) 
+0

и что будет '' check_loaded'' быть? –

1

Все в блоке Ьгу происходит не будет выполняться до тех пор, в Exception поднимается, и тогда except блок Волд назвать.

Итак, вы нарушаете во время первой итерации.

Я думаю, что вы имеете в виду:

while(True): 
    try: 
     some_function() 
    except: 
     time.sleep(2) 
     break 

Когда возбуждается исключение, в то время как цикл будет нарушен.

+0

Как сбежать, если когда исключение не поднято –

+1

, я понимаю, что он хочет продолжать попытки до тех пор, пока '' try'' не удастся. –

-1

удалить заявление о прекращении производства. Перерыв должен выйти из блока петли после первого

+0

Настоящая история, но это не единственная проблема. Должна быть какая-то стратегия выхода, иначе это будет работать вечно. –

+0

он просто спрашивает, почему он ускользает после первого цикла ... –

3

Почему бы не так:

res = False 
while (res == False): 
    time.sleep(2) 
    try: 
     some_function() 
     res = boolean(some_function()) 
    except: 
     continue