我想将各种Python对象的列表连接成一个字符串。对象可以是字面上的任何东西。我想我可以使用以下代码完成此操作:
.encode('utf-8')
但不幸的是,有时会给我一个UnicodeEncodeError:
' '.join([x.encode('utf-8') for x in the_list])
在this SO answer我发现有人说我需要使用int
,所以我将代码更改为:
AttributeError: 'int' object has no attribute 'encode'
但是如果对象不是字符串或unicodes但是例如.encode('utf-8')
,我得到str()
。所以这意味着我需要使用某种if语句来检查它是什么类型以及如何转换它。但是我应该何时使用.bashrc
,何时应该使用Runtime.getRuntime().exec(new String[] { "/bin/bash", "-c", "update-logbot" });
?
如果我还可以为此做一些oneliner会更好,但我不知道怎么做?还有其他人知道吗?欢迎所有提示!
答案 0 :(得分:6)
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'
答案 1 :(得分:1)
您可以尝试join
使用unicode对象..
u' '.join(unicode(x) for x in thelist)
或者之前你所拥有的将在python3中正常工作。请务必:
有关详细信息,请参阅this talk
答案 2 :(得分:0)
您可以尝试将三元运算符与当前的单行运算符结合使用。此外join
对于生成器也可以正常工作,因此我认为您不需要创建列表。像
' '.join(x.encode('utf-8') if isinstance(x, basestring) else str(x)
for x in the_list)