我想将各种 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)
在this SO answer我发现有人说我需要使用 .encode('utf-8')
,所以我将代码更改为:
' '.join([x.encode('utf-8') for x in the_list])
但如果对象不是字符串或 unicode,而是例如 int
,我会得到一个 AttributeError: 'int' object has no attribute 'encode'
。所以这意味着我需要使用某种 if 语句来检查它是什么类型以及如何转换它。但是什么时候应该使用.encode('utf-8')
,什么时候应该使用str()
?
如果我也可以为此做某种单线效果会更好,但我不知道怎么做?还有人知道吗?欢迎所有提示!
最佳答案
Python 2.x 使用 repr()
。如果您不介意结果中出现非 ASCII Unicode,Python 3.x 使用 repr()
,如果您介意,则使用 ascii()
:
>>> 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'
关于python - 如何将*任何* Python 对象转换为字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34340086/