我正在尝试将字符串作为参数传递给python(2)中的函数,但是当我尝试执行它时,我收到一条错误消息:
Error get_all_tweets expected a string or other character buffer object
这是我的代码:
def get_all_tweets(screen_name):
consumer_key = 'XXXXXXXXXXXXXXXXXXXXXXXX'
consumer_secret = 'XXXXXXXXXXXXXXXXXXXXXXXX'
access_token = 'XXXXXXXXXXXXXXXXXXXXXXXX'
access_secret = 'XXXXXXXXXXXXXXXXXXXXXXXX'
auth = OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_secret)
api = tweepy.API(auth)
alltweets = []
new_tweets = api.user_timeline(screen_name = screen_name, count = 200)
alltweets.extend(new_tweets)
try:
with open('$screen_name.json', 'a') as f:
f.write(alltweets)
return True
except BaseException as e:
print ('Error get_all_tweets %s' % str(e))
return True
get_all_tweets(str("BarackObama"))
我无法理解为什么我会抱怨这个参数不是字符串,显然是这样。我是python的新手,但我遇到的每个资源都说这是将字符串作为参数传递的方法。
我有监督的东西吗?我没有得到任何其他错误
我使用的是Python 2.7.12。
提前致谢
答案 0 :(得分:4)
奇怪的错误源于你捕捉BaseException
,这是你永远不应该做的事情。
真正的错误是TypeError
:您尝试将列表写入文件:
f.write(alltweets)
这不起作用,因为文件对象的write方法只接受字符串或其他字符缓冲区对象作为参数。
将列表写入文件的方法是迭代它:
for tweet in alltweets:
f.write(tweet + "\n")
这可能不适用于你的情况,因为我假设tweepy返回什么,因为推文是字典,而不是简单的字符串。在这种情况下,使用json
对其进行编码:
import json
...
for tweet in alltweets:
f.write(json.dumps(tweet) + "\n")