如何将*any*Python对象转换为字符串?

kra*_*r65 7 python utf-8

我想将各种Python对象的列表连接成一个字符串.对象可以是字面上的任何东西.我想我可以使用以下代码完成此操作:

' '.join([str(x) for x in the_list])
Run Code Online (Sandbox Code Playgroud)

但不幸的是,有时会给我一个UnicodeEncodeError:

UnicodeEncodeError: 'ascii' codec can't encode character u'\xa0' in position 80: ordinal not in range(128)
Run Code Online (Sandbox Code Playgroud)

这个SO答案中,我发现有人说我需要使用.encode('utf-8'),所以我将代码更改为:

' '.join([x.encode('utf-8') for x in the_list])
Run Code Online (Sandbox Code Playgroud)

但是如果对象不是字符串或unicodes但是例如ints我得到了一个AttributeError: 'int' object has no attribute 'encode'.所以这意味着我需要使用某种if语句来检查它是什么类型以及如何转换它.但是什么时候应该使用.encode('utf-8'),什么时候应该使用str()

如果我也可以为此做一些oneliner会更好,但我不知道如何?还有其他人知道吗?欢迎所有提示!

Mar*_*nen 6

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'"
Run Code Online (Sandbox Code Playgroud)

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'
Run Code Online (Sandbox Code Playgroud)