我正在尝试在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_inputproj = "abc"
ProjRegex = 'test1' + proj + 'test2'
然后它的行为与预期一致。
raw_input()
中发生了什么事情,想要进行字符串替换?我的理解是它需要键盘输入,剥离换行符,并以字符串形式返回。
答案 0 :(得分:5)
你在Windows下运行,对吗?您输入的字符串以DOS行结尾终止,因此ProjRegex
由test1abc\rtest2
组成。打印时,\r
会将光标移动到行的开头,此时test2
会覆盖test1
。
答案 1 :(得分:4)
这必须是与尾随\r
相关的问题...
试试这个:
'test1' + proj.rstrip() + 'test2'
说明:
您的连接字符串中间包含\r
。打印时,控制台 将开头打印为test1...
但当遇到\r
时,它"carriage-returns"到行的开头,然后用其余的。
答案 2 :(得分:0)
您能否验证是否已设置PYTHONUNBUFFERED
环境变量?在Windows上设置时,您肯定会遇到raw_input返回\r
的问题。您可以阅读更多相关信息here。