Python +;和%?

Python +;和%?,python,python-2.5,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(

如果我这样做:

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。添加了第二个变量
body
subject
body
是字符串变量。

这就是它的用法(python
2.7
):

e、 g.将格式规范与
打印一起使用

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

这就是它的使用方法(python
2.7
):

e、 g.将格式规范与
打印一起使用

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

我会这样使用它:

logging.debug(u'subject: %s', subject)
在您的例子中,
主题
似乎是unicode。所以格式也应该是unicode

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


请注意,我进行了
debug(u'subject:%s',subject)
而不是
debug(u'subject:%s'%subject)
-因此字符串仅在记录器实际发出记录时格式化。

我将如何使用它:

logging.debug(u'subject: %s', subject)
在您的例子中,
主题
似乎是unicode。所以格式也应该是unicode

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



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

+
用于连接,
%
用于字符串格式化。Python的哪个版本?您是否可以发布
打印主题
(或者
打印(主题)
的输出,如果是在Python 3.x中)?
主题
变量中存储了什么类型的值?它是一个字符串还是别的什么?不,一个空括号是用来分组的,不能使某个东西成为元组。您必须使用
(subject,)
来创建元组。
+
用于连接,
%
用于字符串格式。Python的哪个版本?您可以发布
打印主题
(或者
打印(subject)
的输出(如果在Python 3.x中)?
主题
变量中存储了什么类型的值?它是一个字符串还是别的什么?不,一个空括号是用来分组的,不能使某个东西成为元组。您必须使用
(subject,)
来创建一个元组。这是真的,但是如果您建议避免使用
subject
周围的括号,则它不会改变<代码>'%s'%s和
'%s%%(s)
是相同的。在Python2和Python3.True中都是这样,但是如果您建议避免使用
subject
周围的括号,那么它不会改变<代码>'%s'%s和
'%s%%(s)
是相同的。在Python2和Python3中。谢谢,实际上我已经简化了问题中的代码。实际上,我有类似调试的东西('subject:%s,body:%s%%(subject,body)),我也尝试过使用
日志记录。debug(u'body:%s%%(body))
,仍然得到
UnicodeDecodeError:'ascii'编解码器无法解码位置0处的字节0xd0:ordinal不在范围内(128)
正文
应该是ascii或unicode。尝试:
logging.debug(u'body:%s'%body.decode('utf-8'))
如果body是utf-8编码的。谢谢!解码
body
很有帮助。谢谢,实际上我已经简化了问题中的代码。实际上,我有类似调试的东西('subject:%s,body:%s%%(subject,body)),我也尝试过使用
日志记录。debug(u'body:%s%%(body))
,仍然得到
UnicodeDecodeError:'ascii'编解码器无法解码位置0处的字节0xd0:ordinal不在范围内(128)
正文
应该是ascii或unicode。尝试:
logging.debug(u'body:%s'%body.decode('utf-8'))
如果body是utf-8编码的。谢谢!解码
正文
有帮助。