这很有效:
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)