2013-09-26 3 views
0

Я хочу написать вектор плавающих чисел в строку. Часть моего кода:Запись вектора плавающих чисел в строку. TypeError: недостаточно аргументов. 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, но я не понимаю, почему? что может быть для этого решением?

ответ

1

При использовании формата (%) оператора, вам необходимо предоставить замену для всех в %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)) 
2

Ваша строка формата содержит два заполнителя, но вы передаете только одну строку. Это не то, как работает строка интерполяция, вам придется проходить все сразу:

Do:

print str_to_print % (
    (','.join(str(j) for j in ROI_X_vect)), 
    (','.join(str(j) for j in ROI_Y_vect)) 
) 

Обратите внимание, что это не даст именно то, что вы хотите. Ваша строка формата должна содержать [ и ].

2

До тех пор, как вам нужно две замены в вашей 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:

This method of string formatting is the new standard in Python 3, and should be preferred to the % formatting described in String Formatting Operations in new code.

Таким образом, вы можете изменить свой код на:

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)) 
Смежные вопросы