Python字符串百分号转义

时间:2016-10-25 02:43:48

标签: python

我正在尝试一些字符串输出,我遇到了一些在打印时抛出错误的内容

x = "ll=%s%2C%20%s" % ("lat", "lng")

上面的语法会引发错误:

ValueError: unsupported format character 'C' (0x43) at index 7

我在这里缺少什么?我希望得到一个结果:

ll=lat%2C%20lang

使用%s运算符连接字符串

中的变量

4 个答案:

答案 0 :(得分:5)

当python看到%时,它会在之后期待格式化符号。基本上,它需要类似%s%d的内容......但它找到了C,并且它不知道如何处理它。

您可以在this link中的%之后看到可以放置的内容。

如果您希望在字符串中使用字面%,则必须使用另一个% 转义

>>> x = "ll=%s%%2C%%20%s" % ("lat", "lng")
>>> x
'll=lat%2C%20lng'

请注意,在Python 3中,这种方式被认为是"过时的"支持更新的.format()方法。你也可以在Python 2.7中使用那个(我相信,虽然我不确定它是在Python 2.6中引入的吗?)并且这样做也是这样的:

>>> x = "ll={0}%2C%20{1}".format("lat", "lng")
>>> x
'll=lat%2C%20lng'

或者你甚至可以做更好的事情:

>>> x = "ll={latitude}%2C%20{longitude}".format(latitude="lat", longitude="lng")
>>> x
'll=lat%2C%20lng'

Check it out!(还有,Reddit thread关于它)

答案 1 :(得分:2)

首先,如果你想打印%,你需要像这样做

%% - >转义%文字字符

其他所有组合都将被视为格式化字符。 例如,%c被视为单个字符,表示为C int。

请参阅链接here

答案 2 :(得分:2)

要在python中转义%,只需使用%%,在您的示例中,以下内容将提供您想要的结果,

x = "ll=%s%%2C%%20%s" % ("lat", "lng")

或者你可以使用字符串的格式方法,它在python 3中是首选,也可以在python 2.7中使用

x = "ll={0:s}%2C%20{1:s}".format("lat", "lng")

您可以从%样式格式转换为字符串格式方法,AFAIK,所有%格式字母与字符串的格式方法相同。这意味着"%s" % "lat"只会变为"{0:s}".format("lat")"%d" % 3变为"{0:d}".format(3)等等。请注意此处的0。它指示format方法中的哪个参数已格式化,第一个参数索引为0。

有关python string's format method

的官方文档,请参阅此处的详细信息

答案 3 :(得分:1)

除了%逃脱。你也可以添加'%'在' lat'在通过它之前 或者只是添加另一个'%s'对于'%'

>>> x = "ll=%s2C%s20%s" % ("lat%", "%","lng")
>>> x
'll=lat%2C%20lng'

我只是给你另一个选项。但%% escape是最好的选择

相关问题