发布照片时出现TypeError:'unicode'没有缓冲区接口
我正在尝试使用 tumblpy
这个包来排队上传一张照片。最近我把我的Python环境从Canopy(在Windows上,版本是2.7.6,记得没错的话)换成了Anaconda(使用的是Python 2.7.7),而这个错误之前从来没有出现过。
当我运行这个代码时:
import tumblpy
t = tumblpy.Tumblpy(hidden_key1, hidden_key2, hidden_key3, hidden_key4)
photo = open('C:/Users/David/Documents/Images_API/med_aerotransport.jpg', 'rb')
photo
输出结果是:
<open file 'C:/Users/David/Documents/Images_API/med_aerotransport.jpg', mode 'rb' at 0x0000000006161270>
现在当我尝试上传这张照片时:
response = t.post('post',
blog_url='http://postersvintage.tumblr.com/',
params={'type':'photo',
'state':'queue',
'caption': 'Vintage Med Aerotransport poster',
'tags':'vintage, poster',
'data': photo})
这里是整个错误信息,最后显示 TypeError: 'unicode' does not have the buffer interface
:
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-32-c560435c7a77> in <module>()
5 'caption': 'Vintage Med Aerotransport poster',
6 'tags':'vintage, poster',
----> 7 'data': photo})
C:\Users\David\Anaconda\lib\site-packages\python_tumblpy-1.0.2-py2.7.egg\tumblpy\api.pyc in post(self, endpoint, blog_url, extra_endpoints, params)
170 def post(self, endpoint, blog_url=None, extra_endpoints=None, params=None):
171 return self.request(endpoint, method='POST', blog_url=blog_url,
--> 172 extra_endpoints=extra_endpoints, params=params)
173
174 def get_avatar_url(self, blog_url, size=64):
C:\Users\David\Anaconda\lib\site-packages\python_tumblpy-1.0.2-py2.7.egg\tumblpy\api.pyc in request(self, endpoint, method, blog_url, extra_endpoints, params)
124 if files:
125 kwargs['params'] = params
--> 126 response = func(url, **kwargs)
127 except requests.exceptions.RequestException:
128 raise TumblpyError('An unknown error occurred.')
C:\Users\David\Anaconda\lib\site-packages\requests-1.2.2-py2.7.egg\requests\sessions.pyc in post(self, url, data, **kwargs)
375 """
376
--> 377 return self.request('POST', url, data=data, **kwargs)
378
379 def put(self, url, data=None, **kwargs):
C:\Users\David\Anaconda\lib\site-packages\requests-1.2.2-py2.7.egg\requests\sessions.pyc in request(self, method, url, params, data, headers, cookies, files, auth, timeout, allow_redirects, proxies, hooks, stream, verify, cert)
322
323 # Prepare the Request.
--> 324 prep = req.prepare()
325
326 # Send the request.
C:\Users\David\Anaconda\lib\site-packages\requests-1.2.2-py2.7.egg\requests\models.pyc in prepare(self)
223 p.prepare_headers(self.headers)
224 p.prepare_cookies(self.cookies)
--> 225 p.prepare_body(self.data, self.files)
226 p.prepare_auth(self.auth, self.url)
227 # Note that prepare_auth must be last to enable authentication schemes
C:\Users\David\Anaconda\lib\site-packages\requests-1.2.2-py2.7.egg\requests\models.pyc in prepare_body(self, data, files)
383 # Multi-part file uploads.
384 if files:
--> 385 (body, content_type) = self._encode_files(files, data)
386 else:
387 if data:
C:\Users\David\Anaconda\lib\site-packages\requests-1.2.2-py2.7.egg\requests\models.pyc in _encode_files(files, data)
131 new_fields.append((k, new_v))
132
--> 133 body, content_type = encode_multipart_formdata(new_fields)
134
135 return body, content_type
C:\Users\David\Anaconda\lib\site-packages\requests-1.2.2-py2.7.egg\requests\packages\urllib3\filepost.pyc in encode_multipart_formdata(fields, boundary)
75 'filename="%s"\r\n' % (fieldname, filename))
76 body.write(b('Content-Type: %s\r\n\r\n' %
---> 77 (content_type,)))
78 else:
79 data = value
TypeError: 'unicode' does not have the buffer interface
1 个回答
1
这个问题通过更新 requests
库解决了,正如Martijn Pieters所建议的那样。