我正在获得绝对的最奇怪的 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'
我想指出字符串连接是如何使字符串的部分消失,并以某种方式以不同的顺序连接参数。所以...帮助将不胜感激。
答案 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
\r
是carriage 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)