>>> a = 'testing'
>>> b = a[:3] + '\' + a[3:]
>>> File "<stdin>", line 1
>>> b = a[:3] + '\' + a[3:]
^
>>>SyntaxError: EOL while scanning string literal
>>> b = a[:3] + '\\' + a[3:]
>>> b
'tes\\ting'
>>> sys.version
'2.7 (r27:82500, Sep 16 2010, 18:02:00) \n[GCC 4.5.1 20100907 (Red Hat 4.5.1-3)]'
第一个错误是可以理解和被驱逐的。最后的报价正在被吃掉,而翻译也是barfs。 但是,第二个例子应该有效。为什么有两个斜杠?
Python 2.7
谢谢,
编辑:谢谢格雷格。在翻译工作而不使用repr(b)是一个问题。 Python工作正常,但我没有查看输出的正确版本。
答案 0 :(得分:7)
你被Python的输出误导了。尝试:
>>> a = "test\\ing"
>>> print(a)
test\ing
>>> print(repr(a))
'test\\ing'
>>> a
'test\\ing'
答案 1 :(得分:1)
如果你想要双斜线,因为shell将再次转义\,请使用原始字符串:
b = a[:3] + r'\\' + a[3:]
答案 2 :(得分:1)
'tes\\ting'
是正确的,但您正在查看字符串的repr
输出,该输出将始终显示转义字符。
>>> print 'tes\\ting'
tes\ting
答案 3 :(得分:1)
第二个例子是正确的。有两个斜杠,因为您正在打印字符串的 Python表示。
如果您想查看实际字符串,请拨打print a
。
答案 4 :(得分:0)
b在第二个例子中很好,你看到两个斜杠,因为你正在打印b的表示,所以斜杠也会被转义。
>>> b
'tes\\ting'
>>> print b
tes\ting
>>>
答案 5 :(得分:0)
Python在显示字符串的表示时再次引用反斜杠(以这种方式可以粘贴它并使用转义的反斜杠获取字符串)。
如果你打印字符串,你会发现实际字符串中只有一个。
>>> print "hello\\world"
hello\world