我用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')
错误表示在
msg
dict中没有text
键。可能是某些没有文本的特殊电报消息,或者在某些情况下代码中存在删除text
键的错误。你可以利用当没有文本时得到
^{pr2}$None
。或者当没有文本时获取空字符串(即
''
)。在您还可以检查
msg
内是否有text
运算符,或者没有in
运算符:如果你想让你的服务一直运行,你应该添加一些自动重启的机制。在
就像在Python中,在发生任何错误后重新启动:
我还建议在文件或服务(如Sentry)中记录错误,以调查为什么之后没有文本。在
当从
dict
请求一个值,但字典中不存在该键时,KeyError
将引发。在因此,在您的例子中,
msg
字典没有键text
。在您应该检查代码以确保
msg
字典包含与键text
相关联的值。或者,如果您希望msg
有时不包含键text
,则应该使用get
方法访问字典,该方法从不引发KeyError
。有关详细信息,请参见the docs。在相关问题 更多 >
编程相关推荐