【问题标题】:How do I trace UnicodeDecodeError: 'utf8' codec can't decode byte 0x85 in position 1950: invalid start byte如何跟踪 UnicodeDecodeError: 'utf8' codec can't decode byte 0x85 in position 1950: invalid start byte
【发布时间】:2018-07-11 08:03:28
【问题描述】:

我正在尝试运行一个正在开发中的应用,但我不断收到 UnicodeDecodeError: 'utf8' codec can't decode byte 0x85 in position 1950: invalid start byte

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

{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

【问题讨论】:

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


    【解决方案1】:

    当然,读取这样的长回溯可能会很棘手。

    首先,您需要知道如何阅读回溯的行。它们成对出现:在哪里可以找到代码的描述,以及代码的 sn-p。像这样,最后一行:

    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)
    

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

    【讨论】:

      猜你喜欢
      • 2014-09-27
      • 1970-01-01
      • 2014-05-14
      • 2020-12-26
      • 2018-10-15
      • 1970-01-01
      • 2020-03-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多