ValueError:形成字符串时不支持的格式字符

时间:2012-01-13 20:00:40

标签: python

这有效:

print "Hello World%s" %"!"

但这不是

print "Hello%20World%s" %"!"

错误为ValueError: unsupported format character 'W' (0x57) at index 8

我正在使用Python 2.7。

我为什么要这样做?好%20用于代替网址中的空格,如果使用它,我无法使用printf格式形成字符串。但为什么Python会这样做?

6 个答案:

答案 0 :(得分:59)

你可以像这样逃避%20中的%:

print "Hello%%20World%s" %"!"

或者您可以尝试使用字符串格式化例程,例如:

print "Hello%20World{0}".format("!")

http://docs.python.org/library/string.html#formatstrings

答案 1 :(得分:12)

您可以使用另一个%%%20

来转义%

这是一个类似的相关问题Python string formatting when string contains "%s" without escaping

答案 2 :(得分:5)

你可能有一个错字..在我的情况下,我说%w我想说%s。

答案 3 :(得分:4)

那么,为什么首先在格式化字符串中引用%20 url-quoting转义符?理想情况下,您首先要进行插值格式化:

formatting_template = 'Hello World%s'
text = '!'
full_string = formatting_template % text

然后你会在之后引用它:

result = urllib.quote(full_string)

这样更好,因为它会引用字符串中所有可引用url的内容,包括text部分中的内容。

答案 4 :(得分:2)

我正在使用python插值法,但忘记了结尾的s字符:

a = dict(foo='bar')
print("What comes after foo? %(foo)" % a) # Should be %(foo)s

注意那些错别字。

答案 5 :(得分:0)

对于使用python 3进行检查的任何人

如果要打印以下输出"100% correct"

python 3.8: print("100% correct")
python 3.7及更低版本: print("100%% correct")


一个精巧的编程变通办法,用于跨diff的python版本兼容:

注意:如果必须使用此功能,则可能会遇到许多其他错误...我建议您在相关计算机中升级/降级python,以便它们全部兼容。

DevOps是上述明显的例外-实施以下代码确实适用于特定的DevOps /调试方案。

import sys

if version_info.major==3:
    if version_info.minor>=8:
        my_string = "100% correct"
    else:
        my_string = "100%% correct"

# Finally
print(my_string)