2014-10-07 159 views
0

所以现在我使用python 3.4我的代码无法正常工作。我从cStringIO导入,现在我修复了它出现意外的错误。在Python 3.4中使用StringIO

继承人我的错误:

Traceback: 
File "/home/callumb/webapps/photo/lib/python3.4/Django-1.7-py3.4.egg/django/core/handlers/base.py" in get_response 
    111.      response = wrapped_callback(request, *callback_args, **callback_kwargs) 
File "/home/callumb/webapps/photo/lib/python3.4/Django-1.7-py3.4.egg/django/contrib/admin/options.py" in wrapper 
    567.     return self.admin_site.admin_view(view)(*args, **kwargs) 
File "/home/callumb/webapps/photo/lib/python3.4/Django-1.7-py3.4.egg/django/utils/decorators.py" in _wrapped_view 
    105.      response = view_func(request, *args, **kwargs) 
File "/home/callumb/webapps/photo/lib/python3.4/Django-1.7-py3.4.egg/django/views/decorators/cache.py" in _wrapped_view_func 
    52.   response = view_func(request, *args, **kwargs) 
File "/home/callumb/webapps/photo/lib/python3.4/Django-1.7-py3.4.egg/django/contrib/admin/sites.py" in inner 
    204.    return view(request, *args, **kwargs) 
File "/home/callumb/webapps/photo/lib/python3.4/Django-1.7-py3.4.egg/django/contrib/admin/options.py" in add_view 
    1437.   return self.changeform_view(request, None, form_url, extra_context) 
File "/home/callumb/webapps/photo/lib/python3.4/Django-1.7-py3.4.egg/django/utils/decorators.py" in _wrapper 
    29.    return bound_func(*args, **kwargs) 
File "/home/callumb/webapps/photo/lib/python3.4/Django-1.7-py3.4.egg/django/utils/decorators.py" in _wrapped_view 
    105.      response = view_func(request, *args, **kwargs) 
File "/home/callumb/webapps/photo/lib/python3.4/Django-1.7-py3.4.egg/django/utils/decorators.py" in bound_func 
    25.     return func.__get__(self, type(self))(*args2, **kwargs2) 
File "/home/callumb/webapps/photo/lib/python3.4/Django-1.7-py3.4.egg/django/db/transaction.py" in inner 
    394.     return func(*args, **kwargs) 
File "/home/callumb/webapps/photo/lib/python3.4/Django-1.7-py3.4.egg/django/contrib/admin/options.py" in changeform_view 
    1388.     self.save_model(request, new_object, form, not add) 
File "/home/callumb/webapps/photo/lib/python3.4/Django-1.7-py3.4.egg/django/contrib/admin/options.py" in save_model 
    1029.   obj.save() 
File "/home/callumb/webapps/photo/app/images/models.py" in save 
    77.  self.create_thumbnail() 
File "/home/callumb/webapps/photo/app/images/models.py" in create_thumbnail 
    50.  image = Image.open(StringIO(self.image.read())) 

Exception Type: TypeError at /admin/images/image/add/ 
Exception Value: initial_value must be str or None, not bytes 

这里是代码:

def create_thumbnail(self): 

    if not self.image: 
     return 

    from PIL import Image 
    from io import StringIO, BytesIO 
    from django.core.files.uploadedfile import SimpleUploadedFile 
    import os 

    THUMBNAIL_SIZE = (280, 600) 
    DJANGO_TYPE = self.image.file.content_type 
    if DJANGO_TYPE == 'image/jpeg': 
     PIL_TYPE = 'jpeg' 
     FILE_EXTENSION = 'jpg' 
    elif DJANGO_TYPE == 'image/png': 
     PIL_TYPE = 'png' 
     FILE_EXTENSION = 'png' 

    image = Image.open(StringIO(self.image.read())) 
    image.thumbnail(THUMBNAIL_SIZE, Image.ANTIALIAS) 

    temp_handle = StringIO() 
    image.save(temp_handle, PIL_TYPE) 
    temp_handle.seek(0) 

    suf = SimpleUploadedFile(os.path.split(self.image.name)[-1], 
      temp_handle.read(), content_type=DJANGO_TYPE) 
    self.thumbnail.save(
     '%s_thumbnail.%s' % (os.path.splitext(suf.name)[0], FILE_EXTENSION), 
     suf, 
     save=False 
    ) 

回答

1

回溯是告诉你,StringIO需要一个字符串,但您提供字节。使用BytesIO代替os StringIO