Функция bot.polling в блоке try-except, не запускайте остальную часть кода

В моем коде Python функция опроса находится в блоке try-except.

bot = telebot.TeleBot(TOKEN)

while True:
    try:    
        status = "Conected"
        bot.polling(none_stop=False, interval=1)

    except:
        status = "failure"

    print status
    #do something..
    time.sleep(1)

но когда выполняется bot.polling, сценарий никогда не печатает статус и не запускает остальную часть кода.

я пытаюсь добавить "block = True" bot.polling(none_stop=False, interval=1, block=True), но в этом случае опрос не получает сообщения телеграммы.


person Nivek    schedule 21.08.2016    source источник


Ответы (1)


Извините, мой последний ответ был не так ясен, как мог бы быть.

Таким образом, при работе с try/except вы должны убедиться, что у вас есть отступ под видом While и Try: и Except: (и Else, Final, если вы их тоже используете).

Затем вы хотите, чтобы действие, которое вы ищете, имело место в попытке или исключении. Итак, вот что я бы сделал:

Это будет работать и непрерывно зацикливаться один раз в секунду. Если статус цикла был успешным, он будет показывать, что он подключен, в противном случае он напечатает «сбой», а затем повторит цикл через одну секунду. Если он вернет ошибку, он напечатает, что у него есть ошибка. Однако, если вы столкнетесь с ошибкой, она вернется к началу цикла while True:. Вот почему вы не получали печать, так как инструкция exclude не включала печать. Как только произойдет исключение, ваш код вернется к началу и повторит попытку.

while True:
    try:    
        status = "Connected"
        bot.polling(none_stop=False, interval=1)
        pass     

    except:
        status = "failure"
        print status

    else:
        print status


    #do something..
    time.sleep(1)

Это руководство чрезвычайно полезно для начала работы с этими циклами try-catch.

https://docs.python.org/2/tutorial/errors.html

Вот пример попытки, за исключением того, что я использую, что работает:

token = 0
while token == 0:
    print("Welcome to the back office.\nYou will need to log in to contine.")
    sleep(1)
    print("="*5 + " Please log in " +"="*5)
    print(" ")
    email = raw_input("Email: ")
    print(" ")
    password = getpass.getpass("Password: ")
    authpayload = "grant_type=password&username=" + email + "&password=" + password
    login = requests.post(url+'/token', data=authpayload) #testing
    token = login.json()
    try:
        token = token["access_token"]
        pass
    except:
        print(" ")
        print("="*5 + " ERROR " +"="*5)
        print(token)
        print("Sorry please try logging in again.")
        logging.info("user login failed " + str(token))
        logging.info("user tried email: " + email)
        token = 0
        sleep(1)
    else:
        print(" ")
        print("="*5 + " You're now logged in " +"="*5)
        print(" ")
        logging.info("user login succeeded")
        logging.info("user email: " + email)
        sleep(.5)
        pass

В моем случае я «пытаюсь» увидеть, есть ли в ответе json объект с ключом «access_token», если нет, то я знаю, что что-то пошло не так, и я не позволяю пользователю продолжать. Затем это отправляет их обратно наверх, поскольку в области исключения я удостоверяюсь, что токен снова установлен на 0. Это означает, что этот цикл будет выполняться до тех пор, пока моя программа не получит значение для токена доступа.

Я искренне надеюсь, что это поможет! Если это решит вашу проблему, пожалуйста, примите это!

person beerandsmiles    schedule 21.08.2016
comment
объясните пожалуйста? - person Nivek; 21.08.2016
comment
@Nivek Я обновил свой ответ, чтобы он был более подробным и дал вам ресурс, который поможет вам с try/except/else. Надеюсь, это больше то, что вы ищете. - person beerandsmiles; 22.08.2016
comment
@Nivek снова обновил пример цикла Try Except Else, который я использую в одном из своих сценариев. - person beerandsmiles; 22.08.2016
comment
@Nivek Любая дальнейшая удача? - person beerandsmiles; 26.08.2016