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] metaclass.livejournal.com 2012-05-22 01:27 pm (UTC)(link)
А, они там при старте файлы грузят, а потом по имени их ищут. Поэтому и не находит, т.к. ничего не загружено.

[identity profile] besm6.livejournal.com 2012-05-22 02:15 pm (UTC)(link)
Ну да, естественно. Тот, кто грузит, писал так, чтобы грузить все то, что есть. Чтоб не менять код ни при добавлении файлов, ни при пропадании нужды в них.

А тот, кто писал форму, полагал, что для нормальной работы этот файл все равно нужен, поэтому при нормальной работе он все равно будет, а обрабатывать ненормальную ситуацию так лень, и что с нею делать, он тоже не придумал...

У меня недавно такой этап в хаскеле был. Когда, конечно, видно, что функция частичная, но вроде бы тут не должно быть пустого списка, а оборачивать в Maybe, а главное, потом разворачивать обратно или join'ить, так лень, и композиция сразу перестает работать... Кинуть исключение, конечно, можно, беда в том, что поймать _своевременно_ нельзя - дело происходит в чистом коде. Логгинг, опять же, неудобно делать, поэтому он не делается.

А потом вдруг оказывается, что контракт не выполняется, программа падает с заявлением Prelude.undefined, и ищи этот undefined... Ну ладно, слов undefined в ней немного, а вот !! хватает...

А с питоном тоже аналогично получается, когда к программке (суффикс "к" важен), которая изначально была сделана как запускаемая вручную, в процессе развития приделывается демонизация - а потом сиди и думай, то ли почта не ходит, то ли offlineimap рухнул. Потому как ручная программка может себе позволить неперехваченное исключение, его видно... Причем рухает он, ну, раз в два месяца, типа когда вдруг сетка в особо неудачный момент отвалилась.

[identity profile] metaclass.livejournal.com 2012-05-22 02:22 pm (UTC)(link)
Там печально вообще. Пути для поиска конфигов, в которых прописана настройка путей к эти файлам, захардкодены в C:\Program Files\ вместо указания относительного пути.

[identity profile] besm6.livejournal.com 2012-05-22 02:39 pm (UTC)(link)
Ну, может, для них абсолютный путь - это то, что начинается с http://