【发布时间】:2018-03-25 09:55:30
【问题描述】:
我写了一个关于这个问题的小例子,让大家看看使用 Python 2.7 和 Django 1.10.8 发生了什么
# -*- coding: utf-8 -*-
from __future__ import absolute_import, division, unicode_literals, print_function
import time
from django import setup
setup()
from django.contrib.auth.models import Group
group = Group(name='schön')
print(type(repr(group)))
print(type(str(group)))
print(type(unicode(group)))
print(group)
print(repr(group))
print(str(group))
print(unicode(group))
time.sleep(1.0)
print('%s' % group)
print('%r' % group) # fails
print('%s' % [group]) # fails
print('%r' % [group]) # fails
退出,输出如下+回溯
$ python .PyCharmCE2017.2/config/scratches/scratch.py
<type 'str'>
<type 'str'>
<type 'unicode'>
schön
<Group: schön>
schön
schön
schön
Traceback (most recent call last):
File "/home/srkunze/.PyCharmCE2017.2/config/scratches/scratch.py", line 22, in <module>
print('%r' % group) # fails
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 11: ordinal not in range(128)
有人知道这里发生了什么吗?
【问题讨论】:
-
您是否可以通过不将“组”对象嵌套在向量中的测试来补充您的问题?
-
@DavidBern 完成。
-
我很难复制您的错误。但是,我遇到了同样的问题。原因是在 repr 方法中解码了“ä”。最初效果很好,直到我从 future 导入 unicode_literals。然后解决方案是简单地删除使用解码和 repr 来返回一个 unicode。
-
您正在插入包含隐式解码的 unicode 字符串。请改用
b'...'字节串。 -
@DavidBern:它很容易重现:
u'%s' % '<Group: sch\xc3\xb6n>'。这里的问题是 OP 使用的from __future__ import unicode_literals。
标签: python django format-string