Python字符串连接 - 意外行为

时间:2015-09-01 17:28:22

标签: python string

我正在获得绝对的最奇怪的 Python行为,而我无法在生活中弄明白这一点。运气好的话,这里有人知道发生了什么。

我循环使用以下方法:

<resources>

    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <!-- Customize your theme here. -->
    </style>

</resources>

并按以下方式获得输出:

def request_hiscores_for(name):
  print '+++++ request_hiscores_for() running +++++'+name
  print type(name)
  print '  Requesting hiscores for $name using request_hiscores_for()'.replace('$name',name)
  print '  Requesting hiscores for '+name+' using request_hiscores_for()'
  print '  Requesting hiscores for $name using request_hiscores_for()'.replace('$name','BLA')
  print '----- request_hiscores_for() ending ------\n'

我想指出字符串连接是如何使字符串的部分消失,并以某种方式以不同的顺序连接参数。所以...帮助将不胜感激。

1 个答案:

答案 0 :(得分:5)

很可能你的name变量的内部表示看起来像 -

'10032\r'

示例显示上面的表示(特别是最后的\r,没有\n会导致问题) -

In [17]: name = '10032\r'

In [19]: print('  Requesting hiscores for $name using request_hiscores_for()'.replace('$name',name))
 using request_hiscores_for()32

In [20]: name = '123 Lvs 2 Go\r'

In [21]: print('  Requesting hiscores for $name using request_hiscores_for()'.replace('$name',name))
 using request_hiscores_for() Lvs 2 Go

\rcarriage return,它将光标带回到行的开头,因此在从行开始打印之后打印的任何新字符都会被覆盖,因此会覆盖打印的内容先前。

最有可能的是,无论你在哪里阅读这些名字,你要么直接得到上面的字符串,要么得到类似的东西 -

name = '10032\r\n'

但你要么单独拆分或剥离\n,例如 -

In [22]: name = '10032\r\n123 Lvs 2 Go\r\n'

In [23]: name.split('\n')
Out[23]: ['10032\r', '123 Lvs 2 Go\r', '']

如果您正在根据\n进行拆分,请不要这样做,而是使用 - .splitlines()。示例 -

In [24]: name.splitlines()
Out[24]: ['10032', '123 Lvs 2 Go']

如果您正在执行.strip('\n')之类的操作,请不要这样做,请单独使用.strip()删除所有空格或.strip('\r\n')

此外,最好使用字符串格式,而不是替换方法。像 -

这样的东西
print '  Requesting hiscores for {name} using request_hiscores_for()'.format(name=name)