2017-02-02 20 views
-3

私はPython(2)の関数にパラメータとして文字列を渡そうとしていますが、実行しようとすると次のようなエラーが表示されます:Python関数は文字列をパラメータとして受け付けません

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を使用しています。事前

+4

あなた自身で書いたエラーメッセージは間違いです。 try-exceptを削除すると、もっと便利なエラーメッセージが表示されます。 – user2357112

+1

'f.write(alltweets)'は失敗していませんか?結局のところ、リストです。 'file.write()'は文字列を受け取り、それをリストに渡します。ここに投稿することを考える前に、デバッガを使用して行単位でステップ実行していたはずです。 –

答えて

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") 
+0

はい、私はそれを今見ます。あなたのヒントをありがとう。私はちょうどスタック上の別のポストからコードの部分をつかんだ。私は非常にPythonに新しいとJavaの方法で考える。 – geirmash

+0

また、この回答ごとにループするのではなく、リストに対して 'f.write(" \ n ".join(alltweets))'を実行することもできます。 – Michael

+1

@Michael Rightしかし、それはリストの長さ(非常に長い場合は最初に非常に長い文字列を作成したくないかもしれません)と、それがリストであるかどうか(ジェネレータならば、私の解決策は怠惰です)。私はforループを使った簡単な反復が最も一般的に適用できる方法だと思っています。 – L3viathan

関連する問題