在try-except块中的bot.polling函数,不运行其余的代码

时间:2016-08-21 17:38:05

标签: python bots polling telegram 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),但在这种情况下,轮询不会收到电报信息。

1 个答案:

答案 0 :(得分:0)

道歉,我的最后答案并不像它本来那样清楚。

因此,在使用try /时,你需要确保你在While外观和Try:和Except下得到缩进:(而且,如果你也使用它们的话,最后也是如此)。 / p>

接下来,您希望在try或except中进行您要查找的操作。所以,这就是我要做的事情:

这将每秒运行并连续循环一次。如果循环的状态成功,它将显示已连接,否则它将打印“失败”,然后在一秒后再次尝试循环。如果它返回错误,则会打印出错误。但是,如果遇到错误,它将循环回到while:while循环的顶部。这就是为什么你没有得到一个打印,因为除了指令不包括打印。一旦发生异常,您的代码将返回到顶部并再次尝试。

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”键的对象,如果没有,那么我知道出了问题,我不让用户继续。然后将它们发送回顶部,因为在except区域中我确保将令牌设置回0.意味着此循环将一直运行,直到我的程序收到访问令牌的值。

我真的希望这会有所帮助!如果它解决了您的问题,请接受它!