此错误是什么意思,我可以解决它吗?

时间:2020-06-10 19:38:24

标签: python json csv twitter tweepy

我正在使用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"])

1 个答案:

答案 0 :(得分:1)

看看这是否对https://stackoverflow.com/a/10958477/9592801有帮助,而且我猜您也在尝试写NoneType

编辑: 假设您的tweet json可能看起来像这样,如果尝试将Unicode与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)