Python raw_input搞乱字符串连接

时间:2013-12-03 18:16:59

标签: python windows string concatenation raw-input

我正在尝试在Python中做一些相对简单的事情,我很惊讶这种情况有多么糟糕,因为它应该是多么简单。

我在这里只想连接三个简单的字符串。在以下所有情况下,输入raw_input的输入为"abc"

proj = raw_input("Name of project: ")
print proj
ProjRegex = 'test1' + proj + 'test2'
print ProjRegex

收率:

abc
test2abc

案例2

proj = raw_input("Name of project: ")
print proj
ProjRegex = 'test1%stest2' % (proj)
print ProjRegex

收率:

abc
test2abc

请注意,在这两种情况下,不是按照预期打印"test1abctest2",而是将test2替换为test1。

然后我注意到,如果我说:

,而不是使用raw_input
proj = "abc"
ProjRegex = 'test1' + proj + 'test2'

然后它的行为与预期一致。

raw_input()中发生了什么事情,想要进行字符串替换?我的理解是它需要键盘输入,剥离换行符,并以字符串形式返回。

3 个答案:

答案 0 :(得分:5)

你在Windows下运行,对吗?您输入的字符串以DOS行结尾终止,因此ProjRegextest1abc\rtest2组成。打印时,\r会将光标移动到行的开头,此时test2会覆盖test1

答案 1 :(得分:4)

这必须是与尾随\r相关的问题... 试试这个:

'test1' + proj.rstrip() + 'test2'

说明:

您的连接字符串中间包含\r。打印时,控制台 将开头打印为test1...但当遇到\r时,它"carriage-returns"到行的开头,然后用其余的。

Further reading about newlines

答案 2 :(得分:0)

您能否验证是否已设置PYTHONUNBUFFERED环境变量?在Windows上设置时,您肯定会遇到raw_input返回\r的问题。您可以阅读更多相关信息here