TypeError:无法为tweepy隐式地将'bytes'对象转换为str

时间:2015-10-15 11:10:19

标签: python-3.x twitter tweepy

from tweepy import Stream
from tweepy import OAuthHandler
from tweepy.streaming import StreamListener

ckey=''
csecret=''
atoken=''
asecret=''

class listener(StreamListener):

    def on_data(self,data):
        print(data)
        return True

    def on_error(self,status):
        print(status)


auth = OAuthHandler(ckey,csecret)
auth.set_access_token(atoken, asecret)
twitterStream = Stream(auth, listener())
twitterStream.filter(track="cricket")

此代码根据过滤器过滤推特流。但是我在运行代码后得到跟踪回溯。有人可以帮忙吗

Traceback (most recent call last):
  File "lab.py", line 23, in <module>
    twitterStream.filter(track="car".strip())
  File "C:\Python34\lib\site-packages\tweepy\streaming.py", line 430, in filter
    self._start(async)
  File "C:\Python34\lib\site-packages\tweepy\streaming.py", line 346, in _start
    self._run()
  File "C:\Python34\lib\site-packages\tweepy\streaming.py", line 286, in _run
    raise exception
  File "C:\Python34\lib\site-packages\tweepy\streaming.py", line 255, in _run
    self._read_loop(resp)
  File "C:\Python34\lib\site-packages\tweepy\streaming.py", line 298, in _read_loop
    line = buf.read_line().strip()
  File "C:\Python34\lib\site-packages\tweepy\streaming.py", line 171, in read_line
self._buffer += self._stream.read(self._chunk_size)
TypeError: Can't convert 'bytes' object to str implicitly

2 个答案:

答案 0 :(得分:1)

我假设您正在使用tweepy 3.4.0。您提出的问题是“开放”问题。在github上(https://github.com/tweepy/tweepy/issues/615)。

两种解决方法:

<强> 1) 在streaming.py中:

我将第161行更改为

self._buffer + = self._stream.read(read_len).decode(&#39; UTF-8&#39;,&#39;忽略&#39;)

和第171行到

self._buffer + = self._stream.read(self._chunk_size).decode(&#39; UTF-8&#39;,&#39;忽略&#39;)

然后通过python3 setup.py install重新安装在我本地的tweepy副本上。

<强> 2) 删除tweepy 3.4.0模块,并使用命令安装3.3.0: pip install -I tweepy == 3.3.0

希望有所帮助,

-A

答案 1 :(得分:0)

你不能twitterStream.filter(track="car".strip())。为什么要添加strip(),因为它没有任何用处。

在调用与Twitter的Streaming API的连接之前,

track 必须str类型,tweepy因为您尝试添加而阻止了该连接strip()

如果由于某种原因你需要它,你可以track_word='car'.strip()然后track=track_word,这甚至是不必要的,因为:

>>> print('car'.strip())
car

此外,您获得的错误与您列出的代码不符,您问题中的代码应该可以正常运行。