2016-12-05 197 views
0

嘿我的代码当前正在将实时推文发送到数据库。代码会运行一段时间,5-10分钟,但是;它最终给我下面的错误并退出:Tweepy JSON:'NoneType'对象没有属性'__getitem__'

文件 “twittergeo.py”,线路198,在

文件 “/Library/Python/2.7/site-packages/tweepy/streaming.py”第445行,在过滤器中 self._start(异步) 文件“/ Library /Python/2.7/site-packages/tweepy/streaming.py”,行361,in _start self._run() 文件“/ Library/Python/2.7/site-packages/tweepy/streaming.py“,第294行,在_run 引发异常 TypeError:'NoneType'对象没有属性'getitem'

from tweepy import Stream 
from tweepy import OAuthHandler 
from tweepy.streaming import StreamListener 
import json 
import MySQLdb 

canada =[-141.0,41.7,-51.0,83.7] 

consumer_key = '????????????' 
consumer_secret = '??????????????' 
access_token = '????????????????????????' 
access_secret = '??????????????' 

class TweetListener(StreamListener): 




    def on_data(self, data): 
     alldata = json.loads(data) 
     newdata = json.dumps(data) 

     created_at =  alldata["created_at"] #primary key 
     tweetId =   alldata["id"] 
     text =    alldata["text"]#must be above the dictlists 

     userId =   alldata["user"]["id"] #primarykey 
     twitterHandle =  alldata["user"]["screen_name"] 
     name =    alldata["user"]["name"] 
     location =   alldata["user"]["location"] 
     url =    alldata["user"]["url"] 
     bio =    alldata["user"]["description"] 
     protected =   alldata["user"]["protected"] 
     followers_count = alldata["user"]["followers_count"] 
     friends_count =  alldata["user"]["friends_count"] 
     geo_enabeled =  alldata["user"]["geo_enabled"] 
     lang =    alldata["user"]["lang"] 
     profile_image_url = alldata["user"]["profile_image_url"] 

     placeId =   alldata["place"]["id"]#primarykey 
     cityName =   alldata["place"]["name"] 
     fullName =   alldata["place"]["full_name"] 
     country_code =  alldata["place"]["country_code"] 
     country =   alldata["place"]["country"] 
     bounding_box =  alldata["place"]["bounding_box"] #bug 

     hashtags =   alldata["entities"]["hashtags"] #bug 
     user_mentions =  alldata["entities"]["user_mentions"] 

    return True 

    def on_error(self, status): 

auth = OAuthHandler(consumer_key, consumer_secret) 
auth.set_access_token(access_token, access_secret) 

stream = Stream(auth, TweetListener()) 
stream.filter(locations=canada) 

Iv通过StackOverflow查看并尝试了一些解决方案,但是;似乎没有任何工作。

回答

2

嗯,我要去假设线198

bounding_box =  alldata["place"]["bounding_box"] #bug 

,或者试图任何线路从字典alldata“获得的项目”。

错误TypeError: 'NoneType' object has no attribute 'getitem'意味着您正试图访问NoneType对象。你的代码在几分钟后崩溃的原因可能是你正在做的许多请求之一是返回一个空的或部分空的字典。

这是因为如果你想做到这一点...

alldata = None 
bounding_box = alldata["place"]["whatever"] 

为了解决这个问题,我会把周围on_data一个巨大的try-catch块这样

try: 
    res = on_data(data) 
except Exception as e: 
    print(e) # Just for debuggin purposes 
+0

感谢等。该错误是由于我的程序如何处理bounding_box变量。有时JSON数据不会有变量bounding_box .. –

相关问题