metaclass: (Default)
metaclass ([personal profile] metaclass) wrote2012-05-22 02:11 pm

Как страшно жить или Рукожопые Питонасты

Вырывать руки за такую обработку ошибок. С корнями из жопы вырывать:

Welcome to GNU Radio Companion 3.6.0
Error: 'options'

>>> Failure
Traceback (most recent call last):
File "d:\programm\gnuradio\lib\site-packages\gnuradio\grc\gui\MainWindow.py", line 171, in new_page
flow_graph = self._platform.get_new_flow_graph()
File "d:\programm\gnuradio\lib\site-packages\gnuradio\grc\base\Platform.py", line 148, in get_new_flow_graph
def get_new_flow_graph(self): return self.FlowGraph(platform=self)
File "d:\programm\gnuradio\lib\site-packages\gnuradio\grc\python\FlowGraph.py", line 31, in __init__
_FlowGraph.__init__(self, **kwargs)
File "d:\programm\gnuradio\lib\site-packages\gnuradio\grc\base\FlowGraph.py", line 35, in __init__
self.import_data()
File "d:\programm\gnuradio\lib\site-packages\gnuradio\grc\base\FlowGraph.py", line 176, in import_data
self._options_block = self.get_parent().get_new_block(self, 'options')
File "d:\programm\gnuradio\lib\site-packages\gnuradio\grc\base\Platform.py", line 158, in get_new_block
def get_new_block(self, flow_graph, key): return self.Block(flow_graph, n=self._blocks_n[key])

File "d:\programm\gnuradio\lib\site-packages\gnuradio\grc\base\odict.py", line 34, in __getitem__
return self._data[key]
KeyError: 'options'
Error: 'options'
Вы думаете, как ошибка с таким высокодуховным и легкочитаемым сообщением лечится? А вот так:
set GRC_BLOCKS_PATH=D:\programm\gnuradio\share\gnuradio\grc\blocks

Метапрограммирование во все поля. Ключ 'options' - это ссылка на файл лежащий по вышеуказанному пути, с расширением xml, но вместо того, чтобы показать ошибку "файл не найден" "ошибка пути" или "проверьте переменные окружения", оно валится с KeyError.

Нашел сравнением окружения процесса python.exe на машине где "все работает" и где "не работает".
Причем там где не работает - из программы даже выйти нельзя. Потому что падает оно в конструкторе формы и она остается недоделанной. По моему, это рукожопие чудовищное.

[identity profile] stdray.livejournal.com 2012-05-22 03:49 pm (UTC)(link)
>Нашел сравнением окружения процесса python.exe на машине где "все работает" и где "не работает".

А можно поподробней?

[identity profile] metaclass.livejournal.com 2012-05-22 04:26 pm (UTC)(link)
Берем фар с плагином "список процессов" или procexp от sysinternals. Открываем процесс и смотрим его окружение на одной машине (где ставилось из инсталлятора, поставившего 100500 хуй пойми чего, но при этом все равно неработоспособного без ручной еботни) и на второй, куда было все установленное скопировано, запустилось, но работает с ошибкой.
Основная разница оказалась именно в этой переменной окружения, а все остальные вариации, внезапно хардкодед так, что нигде кроме program files работать не будут.

[identity profile] stdray.livejournal.com 2012-05-22 08:02 pm (UTC)(link)
Спасибо, большое. Я как-то совсем по-дурацки в таких ситуациях: либо гуглю пока не найду в точности подобную проблему, либо переставляю все до победного.

[identity profile] metaclass.livejournal.com 2012-05-23 06:06 pm (UTC)(link)
Я надрочился отлаживать что попало с помощью procmon/procexp/windbg
С минимально вменяемыми программистами, т.е. если баги только в окружении (90% багов вида "не работает") - спасает более чем полностью.