繁体   English   中英

将浮点数向量写入字符串。 TypeError:参数不足。 蟒蛇

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM