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