使用带有 telegram bot api 的 Flask 时控制台中没有错误消息

问题描述 投票:0回答:1

我正在尝试开发简单的电报机器人。刚开始时,我使用轮询来测试机器人。

import telebot

bot = telebot.TeleBot(token)

# decorator indicates that on_text() should be called when 
# user sends text message to the bot
@bot.message_handler(content_types=['text'])
def on_text(message):
    # send message to user with uid "1" and with text '' (wrong, should cause an error)
    bot.send_message(1, '')

bot.polling()

当我向机器人发送文本时,它崩溃了:

A request to the Telegram API was unsuccessful. Error code: 400. Description: Bad Request: message text is empty

这是预期的行为,我希望我的代码在控制台中报告错误。

但是当我切换到 Flask 时,我注意到,该机器人不再打印任何错误,而且,它只是返回错误,就像

try: <sum code> except: return

import flask


bot = telebot.TeleBot(token)
app = flask.Flask(__name__)


@app.route('/', methods=['POST'])
def webhook():
    if flask.request.headers.get('content-type') == 'application/json':
        json_string = flask.request.get_data().decode('utf-8')
        update = types.Update.de_json(json_string)
        bot.process_new_updates([update])
        return ''
    else:
        flask.abort(403)


@bot.message_handler(content_types=['text'])
def on_text(message):

    bot.send_message(1, '')


if __name__ == '__main__':
    app.run()

这不会在短信上出现任何错误,即使它应该出现。只需打印“1”并返回。

在控制台中显示错误的唯一方法是放置

try: 
    ...code...
except Exception as e: 
    print(e)

胜过一切。

如果我手动调用函数(而不是用 @bot.commands 等装饰它),它也会报告错误

我不知道..

python flask telegram-bot
1个回答
0
投票

webhook()
中未引发异常的原因是机器人不会自动为您引发任何异常。默认情况下,
bot.process_new_updates()
将在内部使用工作线程来完成其工作,并且当工作线程遇到异常(例如在您的情况下)时,它只会存储异常信息而不传播它。然后由机器人用户检查并引发异常。

使用

polling
时看到异常的原因是因为它在内部检查并引发任何异常,而您没有也不应该在
webhook()
中执行此操作。

为了确保引发异常,您可以简单地让机器人运行而不使用工作线程。

bot = telebot.TeleBot(token, threaded=False)
© www.soinside.com 2019 - 2024. All rights reserved.