Python Telegram bot运行数小时后出现按键错误

2024-06-17 09:49:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我用Python编写了一个电报机器人,它运行在我的Raspberry Pi(Raspbian)上。在机器人运行了几个小时后,我终于看到了一个错误。在

在我发布完整的代码之前,有人能帮我理解错误吗?我想无限期运行这个机器人,或者至少运行几天,然后我需要重新启动它。在

误差如下:

Traceback (most recent call last):
  File "/home/pi/Schreibtisch/StreamrPreisBot/telepot/loop.py", line 37, in run_forever
    self._handle(msg)
  File "/home/pi/Schreibtisch/StreamrPreisBot/streamrinfobot.py", line 32, in handle
    command = msg['text']
KeyError: 'text'

编辑: 使用以下代码:

^{pr2}$

这段代码能解决问题吗?在

def handle(msg):
    chat_id = msg['chat']['id']
    command = msg.get('text')

Tags: 代码textinpyhome错误linepi
2条回答

错误表示在msgdict中没有text键。可能是某些没有文本的特殊电报消息,或者在某些情况下代码中存在删除text键的错误。你可以利用

command = msg.get('text')

当没有文本时得到None。或者

^{pr2}$

当没有文本时获取空字符串(即'')。在

您还可以检查msg内是否有text运算符,或者没有in运算符:

if 'text' not in msg:
    logger.error('bad message received!')
    return

如果你想让你的服务一直运行,你应该添加一些自动重启的机制。在

就像在Python中,在发生任何错误后重新启动:

while True:
    try:
        logger.info("Starting bot")
        run_bot()
    except Exception:
        logger.exception("Something bad happened. Restarting")

我还建议在文件或服务(如Sentry)中记录错误,以调查为什么之后没有文本。在

当从dict请求一个值,但字典中不存在该键时,KeyError将引发。在

因此,在您的例子中,msg字典没有键text。在

您应该检查代码以确保msg字典包含与键text相关联的值。或者,如果您希望msg有时不包含键text,则应该使用get方法访问字典,该方法从不引发KeyError。有关详细信息,请参见the docs。在

相关问题 更多 >