如何跟踪UnicodeDecodeError:' utf8'编解码器不能解码1950位的字节0x85:无效的起始字节

时间:2018-02-01 04:16:49

标签: python django python-2.7 unicode utf-8

我试图在开发中运行应用程序,但我一直在努力 UnicodeDecodeError:' utf8'编解码器不能解码1950位的字节0x85:无效的起始字节

请如何跟踪代码的确切部分,因为我无法理解它的错误来源 以下是完整的错误屏幕

{u'selected': {}, u'categories': {u'ratings': ((1, u'*'), (2, u'**'), (3, u'***'), (4, u'****'), (5, u'*****')), u'genre s': <QuerySet []>, u'actors': <QuerySet []>, u'directors': <QuerySet []>}}
Internal Server Error: /movie/
Traceback (most recent call last):
File "c:\python27\lib\site-packages\django\core\handlers\exception.py", line 41, in inner
    response = get_response(request)
File "c:\python27\lib\site-packages\django\core\handlers\base.py", line 187, in _get_response
    response = self.process_exception_by_middleware(e, request)
File "c:\python27\lib\site-packages\django\core\handlers\base.py", line 185, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "C:\Users\Roland\Documents\Web2\myproject_env\myproject2\movies\views.py", line 70, in movie_list
    return render(request, "movies/movie_list.html",context)
File "c:\python27\lib\site-packages\django\shortcuts.py", line 30, in render
    content = loader.render_to_string(template_name, context, request, using=using)
File "c:\python27\lib\site-packages\django\template\loader.py", line 67, in render_to_string
    template = get_template(template_name, using=using)
File "c:\python27\lib\site-packages\django\template\loader.py", line 21, in get_template
    return engine.get_template(template_name)
File "c:\python27\lib\site-packages\django\template\backends\django.py", line 39, in get_template
    return Template(self.engine.get_template(template_name), self)
File "c:\python27\lib\site-packages\django\template\engine.py", line 162, in get_template
    template, origin = self.find_template(template_name)
File "c:\python27\lib\site-packages\django\template\engine.py", line 136, in find_template
    name, template_dirs=dirs, skip=skip,
File "c:\python27\lib\site-packages\django\template\loaders\base.py", line 38, in get_template
    contents = self.get_contents(origin)
File "c:\python27\lib\site-packages\django\template\loaders\filesystem.py", line 29, in get_contents
    return fp.read()
File "C:\Users\Roland\Documents\Web2\myproject_env\lib\codecs.py", line 314, in decode
    (result, consumed) = self._buffer_decode(data, self.errors, final)
UnicodeDecodeError: 'utf8' codec can't decode byte 0x85 in position 1950: invalid start byte

1 个答案:

答案 0 :(得分:0)

读这样长的追溯可能会很棘手。

首先,您需要知道如何阅读回溯的行。它们成对出现:描述代码的位置以及代码片段。像这样,最后一行:

File "C:\Users\Roland\Documents\Web2\myproject_env\lib\codecs.py", line 314, in decode
    (result, consumed) = self._buffer_decode(data, self.errors, final)

这会告诉您要查找哪个文件,行号和函数以查找涉及的代码行。最后一行是引发实际错误的行。但是,它不是代码的一行 - 它来自库。您需要阅读库代码以调试代码中的异常是非常罕见的。所以我们看下一行:

File "c:\python27\lib\site-packages\django\template\loaders\filesystem.py", line 29, in get_contents
    return fp.read()

这是调用我们刚才看到的行的行。它也不是你的代码 - 它来自django。因此,您要一步一步地查找,直到找到代码中的一行。这是:

File "C:\Users\Roland\Documents\Web2\myproject_env\myproject2\movies\views.py", line 70, in movie_list
    return render(request, "movies/movie_list.html",context)

这不是导致异常的行,但它是您负责的代码的最后一部分,最终导致异常。因此,这很可能是您需要进行更改的地方。实际上,进一步查看回溯,这是您可以控制的唯一行 - 其余都在库中。所以这绝对是你需要做出改变的地方。现在,您可以缩小搜索范围以查找更多信息:您需要以某种方式使用不同的参数调用render。我会搜索django render UnicodeDecodeError。事实上,第一个打击是另一个Stack Overflow问题,问题完全相同!不幸的是,答案并不是很有帮助。但如果你继续搜索,你会找到一个。