Django中错误消息连续%s字符串替换用法的技术咨询
Python字符串格式化中连续%s的用法原理
先看你提到的代码片段:
raise LayerMapError( "Invalid mapping geometry; model has %s%s, " "layer geometry type is %s." % (fld_name, "(dim=3)" if coord_dim == 3 else "", ltype) )
这种连续%s%s的用法没有特殊语法,就是Python旧式字符串格式化(%操作符)的正常逻辑:
- 字符串里的每个
%s都是独立的占位符,会按顺序一一对应右边元组里的元素。 - 这里的
%s%s就是两个连续的占位符,分别匹配元组的前两个值:- 第一个
%s替换为字段名fld_name - 第二个
%s替换为"(dim=3)"或空字符串(取决于coord_dim是否等于3) - 后面单独的
%s则匹配第三个值ltype
- 第一个
举个实际运行的例子:
如果fld_name="geom"、coord_dim=3、ltype="POINT",格式化后的错误消息就是:Invalid mapping geometry; model has geom(dim=3), layer geometry type is POINT.
如果coord_dim不是3,第二个占位符替换为空字符串,结果就变成:Invalid mapping geometry; model has geom, layer geometry type is POINT.
这种写法只是把两个相关的内容(字段名+维度标记)的占位符放在一起,让它们输出时紧挨着,不需要额外加空格或分隔符,本质和分开写两个占位符没有区别。
内容的提问来源于stack exchange,提问作者Hugh_Kelley
相关产品推荐
相关产品推荐

