我正在尝试在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
。 你可以在这里阅读更多。