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



这很有效:

print "Hello World%s" %"!"

但这不是

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

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

我使用的是Python 2.7。

我为什么要这么做?%20被用来代替url中的空格,如果使用它,我就不能用printf格式形成字符串。但是Python为什么要这么做呢?

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

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

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

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

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

您可以用另一个%so %%20 逃离%

当字符串包含"%"时,这是一个类似的相关问题Python字符串格式s";不退出

您可能有拼写错误。。在我的情况下,我说的是%w,我想说的是%s。

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

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

注意那些打字错误。

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

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

然后你在url上引用它:

result = urllib.quote(full_string)

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

对于任何使用python 3检查此项的人:

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

python 3.8:print("100% correct")
python 3.7及以下版本:print("100%% correct")


下面显示了一个在不同版本的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)

最新更新