旧%格式字符串转.format时遇ValueError:格式符不允许空格
解决Python .format()格式化时的"Space not allowed in string format specifier"错误
错误原因
在旧的%格式语法里,% 20s中的空格是冗余的——对于字符串类型的格式符s来说,% 20s和%20s的效果完全一致,都是实现右对齐、总宽度20、不足时用空格填充的格式化。
但.format()的格式规范和%语法不同:空格是数值类型专属的符号设置(用来在正数前添加空格),字符串类型的格式符不支持这个设置。当你写{: 20s}时,解析器会把空格识别成无效的格式标记,直接抛出ValueError。
等效的正确写法
要实现原% 20s的效果,直接去掉格式符里的空格即可,有几种等价写法:
显式指定字符串类型和宽度:
'Map: {:20s}'.format(name)省略类型符
s(.format()会自动适配输入的字符串类型):'Map: {:20}'.format(name)显式标注右对齐(默认就是右对齐,可选,用于提高可读性):
'Map: {:>20s}'.format(name)
这些写法都能实现原代码的格式化效果,同时避免报错。
内容的提问来源于stack exchange,提问作者Daraan
相关产品推荐
相关产品推荐

