Python 如何更正键错误或在错误后继续

Python 如何更正键错误或在错误后继续,python,Python,我使用这段代码跟踪一个twitter帐户,如果一个特定的单词被tweet,它会打印文本,tweet id然后删除tweet。下面的代码的工作原理是,在tweet中查找单词“hi”,打印它和id,并删除tweet。问题是,在它删除tweet之后,我立即得到了错误-KeyError'text'。脚本停止了。我是python新手,对字典、异常或KeyError知之甚少。如何创建一个异常来忽略此错误并继续,或者创建一个字典和其他代码以避免发生错误 import time from twython imp

我使用这段代码跟踪一个twitter帐户,如果一个特定的单词被tweet,它会打印文本,tweet id然后删除tweet。下面的代码的工作原理是,在tweet中查找单词“hi”,打印它和id,并删除tweet。问题是,在它删除tweet之后,我立即得到了错误-
KeyError'text'
。脚本停止了。我是python新手,对字典、异常或KeyError知之甚少。如何创建一个异常来忽略此错误并继续,或者创建一个字典和其他代码以避免发生错误

import time
from twython import TwythonStreamer
from twython import Twython



# Twitter application authentication
APP_KEY = ''
APP_SECRET = ''
OAUTH_TOKEN = ''
OAUTH_TOKEN_SECRET = ''


twitter = Twython(APP_KEY, APP_SECRET, OAUTH_TOKEN, OAUTH_TOKEN_SECRET)


# Setup callbacks from Twython Streamer
class TweetStreamer(TwythonStreamer):
        def on_success (self, data):
            if (data['text']) == ('hi'):
                print (data['text'])
                print (data['id'])
                time.sleep(2)
                twitter.destroy_status(id=data['id'])
                print ('Tweet was deleted')


        def on_error(self, status_code, data):
                print (status_code)


# Create streamer
try:
        stream = TweetStreamer(APP_KEY, APP_SECRET, OAUTH_TOKEN, OAUTH_TOKEN_SECRET)
        stream.statuses.filter(follow = '')

except KeyboardInterrupt:
        print ('Process manually stopped')
完全错误:

Traceback (most recent call last):
  File "C:\Users\MainUser\Desktop\Python Scripts\twitterstreamuser.py", line 35, in <module>
    stream.statuses.filter(follow = '')
  File "C:\Users\MainUser\AppData\Local\Programs\Python\Python35-32\lib\site-packages\twython\streaming\types.py", line 66, in filter
    self.streamer._request(url, 'POST', params=params)
  File "C:\Users\MainUser\AppData\Local\Programs\Python\Python35-32\lib\site-packages\twython\streaming\api.py", line 154, in _request
    if self.on_success(data):  # pragma: no cover
  File "C:\Users\MainUser\Desktop\Python Scripts\twitterstreamuser.py", line 20, in on_success
    if (data['text']) == ('hi'):
KeyError: 'text'
回溯(最近一次呼叫最后一次):
文件“C:\Users\MainUser\Desktop\Python Scripts\twitterstreamuser.py”,第35行,在
stream.statuses.filter(follow='')
文件“C:\Users\MainUser\AppData\Local\Programs\Python 35-32\lib\site packages\twython\streaming\types.py”,第66行,在过滤器中
self.streamer._请求(url,'POST',params=params)
文件“C:\Users\MainUser\AppData\Local\Programs\Python\35-32\lib\site packages\twython\streaming\api.py”,第154行,在请求中
如果自我成功(数据):#布拉格语:无封面
文件“C:\Users\MainUser\Desktop\Python Scripts\twitterstreamuser.py”,第20行,on\u success
如果(数据['text'])==('hi'):
KeyError:“文本”
您试图从
数据中获取
文本“

data["text"]
但是
数据
没有键
“text”

您可以检查
数据
是否有键
“text”

或更短

if 'text' in data and data['text'] == 'hi':
    print(data['text'])
或者使用
data.get(“text”)
(或
data.get(“text”、“default text”)
)获取
“text”
“default text”
(或


始终存在问题(不在注释中)显示完整的错误消息(回溯)-还有其他有用的信息-即,您在哪一行获得此错误。
keyrerror'text'
表示您尝试执行
数据['text']
,但
数据中没有
'text'
-您可以检查
是否为“text”在数据:中也考虑和处理<代码>没有< /代码>。谢谢所有的快速响应。我已经在帖子中添加了完整的错误信息。谢谢你!假期过后,我终于有时间再做一次。我正在使用你建议的“较短”版本,它似乎没有任何问题。现在,我只需要让它运行几天,看看它是否无法达到TwitterAPI的速率限制。希望不是,但如果是这样的话,我写了一个不同的脚本,它不流,而是检查用户时间线。唯一的问题是我必须包括11秒的延迟,这样它就不会超过twitter的速率限制。因此,我想切换到流媒体方法。再次感谢你的帮助!!
if 'text' in data and data['text'] == 'hi':
    print(data['text'])
msg = data.get("text") # it gives data["text"] or `None`
if msg == 'hi':
   print(msg)