我想将各种Python对象的列表连接成一个字符串.对象可以是字面上的任何东西.我想我可以使用以下代码完成此操作:
' '.join([str(x) for x in the_list])
但不幸的是,有时会给我一个UnicodeEncodeError:
UnicodeEncodeError: 'ascii' codec can't encode character u'\xa0' in position 80: ordinal not in range(128)
在这个SO答案中,我发现有人说我需要使用.encode('utf-8')
,所以我将代码更改为:
' '.join([x.encode('utf-8') for x in the_list])
但是如果对象不是字符串或unicodes但是例如int
s我得到了一个AttributeError: 'int' object has no attribute 'encode'
.所以这意味着我需要使用某种if语句来检查它是什么类型以及如何转换它.但是什么时候应该使用.encode('utf-8')
,什么时候应该使用str()
?
如果我也可以为此做一些oneliner会更好,但我不知道如何?还有其他人知道吗?欢迎所有提示!
Python 2.x使用repr()
.repr()
如果您不介意结果中的非ASCII Unicode,或者ascii()
您执行以下操作,则使用Python 3.x :
>>> a=1 # integer >>> class X: pass ... >>> x=X() # class >>> y='\u5000' # Unicode string >>> z=b'\xa0' # non-ASCII byte string >>> ' '.join(ascii(i) for i in (a,x,y,z)) "1 <__main__.X object at 0x0000000002974B38> '\\u5000' b'\\xa0'"
2.X和3.X repr()
以及3.X 之间差异的示例ascii()
:
>>> # Python 3 >>> s = 'pingüino' # Unicode string >>> s 'pingüino' >>> repr(s) "'pingüino'" >>> print(repr(s)) 'pingüino' >>> ascii(s) "'ping\\xfcino'" >>> print(ascii(s)) 'ping\xfcino' >>> # Python 2 >>> s = u'pingüino' >>> s u'ping\xfcino' >>> repr(s) "u'ping\\xfcino'" >>> print(repr(s)) u'ping\xfcino'