Python函数不接受字符串作为参数

时间:2017-02-02 21:26:21

标签: python python-2.7

我正在尝试将字符串作为参数传递给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。

提前致谢

1 个答案:

答案 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")