使用格式化字符串打印时获取奇怪的%

t0m*_*myt 2 python

我正在尝试使用格式化的字符串向sys.stderr打印消息,但最后我得到了一个神秘的%.

如果我写:

 sys.stderr.write("One argument (file name) expected, got %d" % (len(sys.argv) -1))
Run Code Online (Sandbox Code Playgroud)

我得到一个输出:

One argument (file name) expected, got 0%

如果我用打印功能替换它,它的行为符合预期.此外,%有一个白色背景,所以它可能是我的shell无法识别的字符.

Mar*_*ers 7

%可能是zsh外壳打标输出缺少换行符.

print添加换行符,使用时手动添加sys.stderr.write():

sys.stderr.write("One argument (file name) expected, got %d\n" % (len(sys.argv) -1))
Run Code Online (Sandbox Code Playgroud)

  • 也可能是`zsh`的工件,如果输出的最后一行没有以换行结尾,它会附加一个'%`. (2认同)