小编jen*_*nlu的帖子

在django和unicode中使用python日志记录时出现问题

完全被现在混淆了......我正在开发python/django并使用python日志记录.我的所有应用程序都需要unicode,我的所有模型都只有一个unicode()`,返回你'''方法.现在,在登录时,我遇到了一个非常奇怪的问题,它花了很长时间才发现我可以重现它.我已经尝试过Py 2.5.5和Py 2.6.4以及同样的事情.所以

每当我做一些直接记录时,如:

logging.debug(u'new value %s' % group) 
Run Code Online (Sandbox Code Playgroud)

这称为模型组.unicode():返回unicode(group.name)

我的unicode方法看起来像这样:

def __unicode__(self):
    return u'%s - %s (%s)' % (self.group, self.user.get_full_name(), self.role)
Run Code Online (Sandbox Code Playgroud)

即使group.name为XXX或ÄÄ(需要unicode),这也适用.但是当我出于某种原因想要记录一个集合,列表,字典,django-query集合以及例如列表中的各个实例可能是unicode或者我没有遇到麻烦...

每当group.name需要像Luleå(我的家乡)这样的unicode时,这会给我一个UnicodeDecodingError

logging.debug(u'new groups %s' % list_of_groups)
Run Code Online (Sandbox Code Playgroud)

通常我得到这样的错误:

Exception Type:     UnicodeDecodeError
Exception Value:    ('ascii',  '<RBACInstanceRoleSet: s2 | \xc3\x84\xc3\x96\xc3\x96\xc3\x85\xc3\x85\xc3\x85 Gruppen>]', 106, 107, 'ordinal not in range(128)')
Run Code Online (Sandbox Code Playgroud)

但是,如果我做的print list_of_groups一切在终端上变得很好

所以,我的理解是列表开始生成自己并对其所有元素执行repr()并返回它们的值 - 在这种情况下它应该是's2 | ÅÄÖÖ',然后列表呈现为(ascii,列表中的东西),然后当尝试将ascii解码为unicode时,这当然不起作用 - 因为列表中的一个元素已经回归当repr完成时,你自己就是一个'...'.

但是为什么这个????'

为什么每当我记录group.name之类的简单事物以及调用unicode方法时,事情都能正常处理并且unicode/ascii被正确处理.每当我变得懒惰并且想要记录列表时,无论何时遇到unicode字符,设置或其他事情都会变坏...

一些工作和失败的例子.如果group.name我去模型字段并group调用__unicode__()

    logging.debug("1. group: %s " % group.name) …
Run Code Online (Sandbox Code Playgroud)

python django unicode logging decoding

7
推荐指数
1
解决办法
6611
查看次数

标签 统计

decoding ×1

django ×1

logging ×1

python ×1

unicode ×1