[英]Python TypeError: not enough arguments for format string. Cant see anything wrong
[英]Writing a vector of floating numbers to a string. TypeError: not enough arguments. Python
我想将一个浮点数向量写入一个字符串。 我的代码的一部分是:
str_to_print = """
Tracking_ROI_X = %s
Tracking_ROI_Y = %s
"""
ROI_X_vect = [1272.0, 8.0, 8.0, 1272.0]
ROI_Y_vect = [1016.0, 1016.0, 8.0, 8.0]
str_to_print = str_to_print %(','.join(str(j) for j in ROI_X_vect))
str_to_print = str_to_print %(','.join(str(j) for j in ROI_Y_vect))
% OUTPUT, should be:
Tracking_ROI_X = [1272.0, 8.0, 8.0, 1272.0]
Tracking_ROI_Y_vect = [1016.0, 1016.0, 8.0, 8.0]
我收到一个名为TypeError的错误,但我不明白为什么? 有什么解决方案?
您的格式字符串有两个占位符,但是您只传递了一个字符串。 这不是字符串插值的工作原理,您必须一次传递所有内容:
做:
print str_to_print % (
(','.join(str(j) for j in ROI_X_vect)),
(','.join(str(j) for j in ROI_Y_vect))
)
请注意,这不能完全满足您的需求。 您的格式字符串应带有[
和]
。
只要您需要在str_to_print
字符串中进行两次替换,就必须将其放在同一行中:
>>> str_to_print = str_to_print %(','.join(str(j) for j in ROI_X_vect), ','.join(str(j) for j in ROI_Y_vect))
>>> print str_to_print
Tracking_ROI_X = 1272.0,8.0,8.0,1272.0
Tracking_ROI_Y = 1016.0,1016.0,8.0,8.0
顺便提一下,建议使用.format
代替%
,取自Python文档:
这种字符串格式设置方法是Python 3中的新标准,应优先于新代码中“字符串格式设置操作”中描述的%格式设置。
因此,您可能需要将代码更改为:
str_to_print = """
Tracking_ROI_X = {0}
Tracking_ROI_Y = {1}
"""
ROI_X_vect = [1272.0, 8.0, 8.0, 1272.0]
ROI_Y_vect = [1016.0, 1016.0, 8.0, 8.0]
str_to_print = str_to_print.format(','.join(str(j) for j in ROI_X_vect), ','.join(str(j) for j in ROI_Y_vect))
使用格式( %
)运算符时,需要为其替换所有 %s
等占位符。 您无法按照自己的方式在多个呼叫中一一对应。
正确的方法是:
str_to_print = str_to_print % (','.join(str(j) for j in ROI_X_vect),
','.join(str(j) for j in ROI_Y_vect))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.