这个错误是什么意思,我可以修复它吗?

问题描述 投票:0回答:1

我正在使用tweepy API来流式传输特定信息,然后将其存储到CSV中。似乎推文存储成功了,但我一直收到以下信息 ('failed ondata', 'coercing to Unicode: need string or buffer, NoneType found') 这条消息是什么意思,我如何去修复它?

from tweepy.streaming import StreamListener
from tweepy import OAuthHandler
from tweepy import Stream
import time
import json, csv 
import sys 

import twitter_credentials




class listener(StreamListener):

  def on_data(self, data):
    try:

        tweet = json.loads(data) 
        text = tweet["text"]
        username = tweet["user"]["screen_name"]
        location = tweet["user"]["location"]
        created_at = tweet["created_at"]
        saveTweets = open('SaveTweets.csv', 'a')  #open a csv which we will append to 
        reload(sys)  
        sys.setdefaultencoding('utf-8')
        saveTweets.write( "created_at : " + created_at +" Username : " + username + "Tweet Text : " + text + "Location : " + location)
        saveTweets.write('\n')

        saveTweets.close()
        return True

    except BaseException, e:
        print('failed ondata', str(e))
        time.sleep(5)







  def on_error(self, status):
      print(status)


auth = OAuthHandler(twitter_credentials.API_KEY, twitter_credentials.API_SECRET_KEY)
auth.set_access_token(twitter_credentials.ACCESS_TOKEN, twitter_credentials.ACCESS_TOKEN_SECRET)

twitterStream = Stream(auth, listener())
twitterStream.filter(track=["plumber"])
python json csv twitter tweepy
1个回答
1
投票

看看这是否有帮助 https:/stackoverflow.coma109584779592801。 而且你还想写 NoneType 我想。

EDIT:假设你的tweet json可能是这样的,如果你尝试用 None 殊途同归 TypeError.

tweet = {
    "text": "some text",
    "user": {
        "screen_name": "screen 1",
        "location": "location 1"
    },
    "created_at": None
}

text = tweet["text"]
username = tweet["user"]["screen_name"]
location = tweet["user"]["location"]
created_at = tweet["created_at"]

data_to_write = u"created_at : " + created_at + u" Username : " + str(username) + u"Tweet Text : " + str(text) + u"Location : " + str(location)

输出。

...
    data_to_write = u"created_at : " + created_at + u" Username : " + str(username) + u"Tweet Text : " + str(text) + u"Location : " + str(location)
TypeError: coercing to Unicode: need string or buffer, NoneType found

现在如果你用 str() 你会发现这个错误,因为它将转换 None 为字符串。

data_to_write = u"created_at : " + str(created_at) + u" Username : " + str(username) + u"Tweet Text : " + str(text) + u"Location : " + str(location)

如果这不能解决你的问题,那么请分享一些关于你的错误的更多细节(行号,python版本等),可以做更深入的研究。例如,从异常中获取更多信息。

import traceback;
import sys

print(sys.version)
try:
    ...
except BaseException as e:
    traceback.print_exc(err)
© www.soinside.com 2019 - 2024. All rights reserved.