在Django中捕获UnicodeEncodeError以有意义的方式呈现

时间:2017-04-13 12:50:59

标签: python django error-handling

我有一个python脚本,用于使用Djnago模板创建静态html文件。它看起来如下:

....
from django.template import Template, Context
from django.conf import settings
settings.configure()
template = """
   <!DOCTYPE html>
            <html lang="en">
             ..........................
             ..........................
   </html>
   """

t = Template(template)
c = Context({"field1":field1_from_program,
             "field2": some_dictionary,
              ......
              ......
              "field1000": some_other_list
            })

    f1=open(args.name+'.html', 'w+')
    try:
        f1.write(t.render(c).encode('utf-8'))
    except UnicodeEncodeError:
        f1.write(t.render(c).encode('ascii', 'ignore').decode('ascii'))
    f1.close()

在某些情况下,我收到以下错误

Traceback (most recent call last):
  File "script.py", line 733, in <module>
    main()
  File "script.py", line 723, in main
    f1.write(t.render(c).encode('ascii', 'ignore').decode('ascii'))
  File "/usr/local/lib/python2.7/dist-packages/django/template/base.py", line 209, in render
    return self._render(context)
  File "/usr/local/lib/python2.7/dist-packages/django/template/base.py", line 201, in _render
    return self.nodelist.render(context)
  File "/usr/local/lib/python2.7/dist-packages/django/template/base.py", line 903, in render
    bit = self.render_node(node, context)
  File "/usr/local/lib/python2.7/dist-packages/django/template/base.py", line 917, in render_node
    return node.render(context)
  File "/usr/local/lib/python2.7/dist-packages/django/template/base.py", line 957, in render
    output = self.filter_expression.resolve(context)
  File "/usr/local/lib/python2.7/dist-packages/django/template/base.py", line 647, in resolve
    obj = self.var.resolve(context)
  File "/usr/local/lib/python2.7/dist-packages/django/template/base.py", line 787, in resolve
    value = self._resolve_lookup(context)
  File "/usr/local/lib/python2.7/dist-packages/django/template/base.py", line 847, in _resolve_lookup
    current = current()
UnicodeEncodeError: 'ascii' codec can't encode character u'\xe9' in position 3: ordinal not in range(128)

我发现content中的某些字段导致了此错误,因此我将.encode('ascii', 'ignore').decode('ascii')添加到导致此错误的变量中。但是,错误日志中并不明显。还有更多此类值,并且错误消息未显示哪个字段导致此错误的详细输出。换句话说,如果"field100":value_for_field100,,我想知道问题是value_for_field100可能正在使用try catch块。

从这个意义上说,请注意我的问题与其他SO问题不同,例如thisthis。因此,我真的相信这不是一个重复的问题。

任何提示都会非常感激。

0 个答案:

没有答案