使用{0:g}去除尾部零时,.format()会返回ValueError错误。

9 浏览
0 Comments

使用{0:g}去除尾部零时,.format()会返回ValueError错误。

我正在尝试生成一个包含偶尔带有尾部零的浮点数的字符串。这是一个包含文本字符串的最小工作示例和我尝试使用{0:g}来删除它们的代码:

xn, cod = 'r', 'abc'
ccl = [546.3500, 6785.35416]
ect = [12.350, 13.643241]
text = '${}_{{t}} = {0:g} \pm {0:g}\;{}$'.format(xn, ccl[0], ect[0], cod)
print text

不幸的是,这返回了:

ValueError: cannot switch from automatic field numbering to manual field specification

这个问题Using .format() to format a list with field width arguments也提到了同样的问题,但我无法弄清楚如何将那里给出的答案应用到这个问题上。

0
0 Comments

在这段代码中,出现了一个使用{0:g}格式化字符串时报错的问题。问题的原因是混合使用了自动字段编号和手动字段编号。解决方法是要么全部使用自动字段编号,要么全部使用手动字段编号。

具体来说,在这段代码中,最初使用了自动字段编号{},然后又使用了手动字段编号{0:g}。这导致了冲突,因为手动字段编号需要指定字段的索引,而自动字段编号会自动为每个字段分配一个索引。

为了解决这个问题,可以将代码修改为全部使用手动字段编号。例如,可以将原始代码中的{}替换为{0},并将{0:g}替换为{1:g}。这样就可以保持一致,避免了冲突。

修正后的代码如下所示:

text = '${0}_{{t}} = {1:g} \pm {2:g}\;{3}$'.format(xn, ccl[0], ect[0], cod)

感谢Gabriel的指正,我不确定应该使用哪些字段编号,因为原始代码中使用了{0:g}两次,但实际参数有四个…

通过以上修正,就可以避免.format()方法使用{0:g}格式化字符串时报错的问题。

0