LINUX.ORG.RU

ошибка в скрипте Python


0

0

Используеться систесма сборки scons. (Это не столь важно,
просто у нее все описываеться на языке Python).

Так вот, когда выполняеться скрипт (пытаеться собраться пакет)
выдаеться ошибка:

scons: Reading SConscript files ...
TypeError: can only concatenate list (not "dict") to list:
...
File "SConstruct", line 946:
our_kargs[key] = self_val + val

Обьясните пожалуйста как исправить данную ошибку.

Спасибо.

anonymous

> our_kargs[key] = self_val + val

по-видимому здесь одно из значений self_val и val предполагалось списком а оказалось dict'ом. надо смотреть код вокруг этого места, и разбираться кто передает неправильные параметры. обычно это легко видно по смыслу программы

anonymous
()
Ответ на: комментарий от anonymous

Вот, написал
print self_val, val
перед
our_kargs[key] = self_val + val

Вот что оно выдало:
['ARCH_IA32'] {'ENABLE_CAPS': 1}
т.е.

self_val соджержит ['ARCH_IA32']
а
val содержит {'ENABLE_CAPS': 1}

Может теперь подскажите в чем ошибка ?

anonymous
()
Ответ на: комментарий от anonymous

Ну это и так понятно было, self_val это у тебя список, val - dict. Ну не может она сложить данные разных типов. Скрипт сам писал? Лучше скажи, что ты этим хотел сделать, или, если можно, весь скрипт запости.

anonymous
()
Ответ на: комментарий от anonymous

Ну а как ты собираешься приводить список к словарю или словарь к списку? Хотя, по смыслу программы это, наверное, можно сделать. Нужно посмотреть, что в результате должно получиться и посмотреть, может, одно из входных значений неправильно получается.

anonymous
()
Ответ на: комментарий от anonymous

val = kargs[key]
(прости что по кусочкам, просто эта система сборки описана на Pythone, и составляет более 1000 строк скрипта)
где key содержит CPPDEFINES

anonymous
()
Ответ на: комментарий от anonymous

могу предположить два варианта или даже три

our_kargs[key] = self_val + val.keys()
our_kargs[key] = self_val + [ k for k,v in val.items() if v ]
our_kargs[key] = self_val + [ "%s=%s"%i for i in val.items() ]

может случиться что один из них сработает.
но вообще надо разбираться откуда ошибка вылезла

anonymous
()
Ответ на: комментарий от anonymous

Во! Спасибо!
Заработало.
Очень признателен и благодарен вам!
ммм, хочеш на gmail аккаунт ?

anonymous
()
Ответ на: комментарий от anonymous

Я выбрал третий, как найболее подходящий по смыслу.
Но также работает и первый вариант (второй не пробовал).
:)

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.