我正在尝试在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行结束,所以ProjRegex由test1abc\rtest2 。 打印时, \r将光标移动到行首,此时test2覆盖test1 。
你能否验证你是否设置了PYTHONUNBUFFERED环境变量? 在Windows上设置时,您肯定会遇到raw_input返回\r 。 你可以在这里阅读更多。