2013-04-20 222 views
0

如果我做的:+和%之間有什麼區別?

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是字符串變量。

+4

「+」用於連接,「%」用於字符串格式。 – 2013-04-20 15:41:52

+0

什麼版本的Python? – 2013-04-20 15:42:11

+0

你可以發佈'print subject'的輸出(或者如果在Python 3.x中是'print(subject)')? – whatyouhide 2013-04-20 15:43:04

回答

4

這是我應該怎樣使用它:

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

你的情況subject似乎是Unicode。所以格式也應該是unicode。

當你做'subject: '+subject,如果其中一個操作數是unicode,另一個操作數會自動轉換爲unicode。

請注意,我做了debug(u'subject: %s', subject)而不是debug(u'subject: %s' % subject) - 所以只有在記錄器實際發出記錄時纔會格式化字符串。

+0

謝謝,實際上我簡化了我的代碼。實際上我有類似debug('subject:%s,body:%s'%(subject,body)) – 2013-04-20 16:20:55

+0

另外我已經嘗試過使用'logging.debug(u'body:%s'% )),仍然得到'UnicodeDecodeError:'ascii'編解碼器無法解碼位置0的字節0xd0:序號不在範圍(128)'中。 – 2013-04-20 16:30:57

+0

'body'應該是ascii或unicode。嘗試:'logging.debug(u'body:%s'%body.decode('utf-8'))'如果body是utf-8編碼的。 – warvariuc 2013-04-20 16:39:29

0

即它應如何使用(蟒2.7):

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

例如使用格式規範與print

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

是的,但如果您建議避免'subject'周圍的括號,那麼它不會改變。 ''%s'%s'和''%s'%(s)'是相同的。 Python 2和3. – whatyouhide 2013-04-20 15:45:12

相關問題