我正在使用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"])
看看这是否有帮助 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)