2015-01-25 3 views
-2

У меня есть следующий цикл, который представляет собой бесконечный цикл. Он зацикливается до тех пор, пока код запроса не равен = 200 и каждый раз он пытается отправить электронное письмо.Python Как закончить бесконечный цикл после 3 попыток

Мне нужно закончить цикл после 3 попыток, затем отправить электронное письмо один раз и выйти из цикла.

Любые советы?

while True: 
    r = requests.get("http://www.website.com/test11") 
    if r.status_code == 200: 
     break 
    else: 
     sendemail(from_addr, to_addr_list, cc_addr_list,subject, message,login, password) 
+1

использовать счетчик, – ZdaR

ответ

1

Если вы хотите, чтобы отправить по электронной почте независимо от того, что вы можете использовать это:

count=0 
while count < 3: 
    r = requests.get("http://www.website.com/test11") 
    if r.status_code == 200 
     break 
    count+=1 

sendemail(from_addr, to_addr_list, cc_addr_list,subject, message,login, password) 

Если вы хотите отправить по электронной почте только в случае failiure, используйте:

count=0 
success = False 
while count < 3: 
    r = requests.get("http://www.website.com/test11") 
    if r.status_code == 200 
     success = True 
     break 
    count+=1 

if(not success) 
    sendemail(from_addr, to_addr_list, cc_addr_list,subject, message,login, password) 
+0

Благодаря вашему второй код работает для меня, – Jecki

+0

мы можем добавить таймер сна между запросами? – Jecki

+0

проверить это http://www.cyberciti.biz/faq/python-sleep-command-syntax-example/ – shudima

0

У Python есть немного неясное предложение о циклах, которое удобно здесь, - оно работает тогда и только тогда, когда цикл заканчивается завершением (т. Е. Он пропускается, если вы нажмете break). Это выглядит следующим образом:

for _ in range(3): 
    r = requests.get("http://www.website.com/test11") 
    if r.status_code == 200: 
     break 

else: 
    sendemail(from_addr, to_addr_list, cc_addr_list,subject, message,login, password) 
Смежные вопросы