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