+和%有什么区别?

时间:2013-04-20 15:40:22

标签: python python-2.5

如果我这样做:

logging.debug('subject: '+subject)
logging.debug('body: '+body)

然后它运作良好。 如果我将其替换为:

logging.debug('subject: %s, body: %s' % (subject, body))

然后我得到

UnicodeDecodeError: 'ascii' codec can't decode byte 0xd0 in position 0: ordinal not in range(128)

如何避免此错误?

UPD。添加了第二个变量bodysubjectbody是字符串变量。

2 个答案:

答案 0 :(得分:4)

这就是我如何使用它:

logging.debug(u'subject: %s', subject)

在您的情况下,subject似乎是unicode。所以格式也应该是unicode。

执行'subject: '+subject时,如果其中一个操作数是unicode,则另一个操作数会自动转换为unicode。

注意我做了debug(u'subject: %s', subject)而不是debug(u'subject: %s' % subject) - 所以只有当记录器实际发出记录时才会格式化字符串。

答案 1 :(得分:0)

应该如何使用它(python 2.7):

logging.debug('subject: %s' % subject)

e.g。使用print的格式规范:

>>> sr = "aaaaaa"
>>> print "d%s" % s
daaaaaa