Python的raw_input搞乱string连接

我正在尝试在Python中做一些相对简单的事情,并且惊讶于这是多么的糟糕,它应该是多么的简单。

我在这里试图连接三个简单的string。 在raw_inputinput的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" ,而是将test2replace为test1。

然后我注意到,如果不是使用raw_input,而是说:

 proj = "abc" ProjRegex = 'test1' + proj + 'test2' 

然后它的行为如预期。

那么在raw_input()中发生的事情是想做stringreplace? 我的理解是,它需要键盘input,剥去一个换行符,并返回一个string。

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

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

说明:

连接的字符串在中间包含\r 。 打印时,控制台打印的开始时间为test1...但是遇到\r ,它会“回车”到行的开头,并用其余部分覆盖。

进一步阅读有关换行符

你在Windows下运行,对吗? 你输入的字符串以DOS行结束,所以ProjRegextest1abc\rtest2 。 打印时, \r将光标移动到行首,此时test2覆盖test1

你能否验证你是否设置了PYTHONUNBUFFERED环境变量? 在Windows上设置时,您肯定会遇到raw_input返回\r 。 你可以在这里阅读更多。