Icon

Demo Try-Catch

Демонстрацияя работы Try-Catch. Обработка исключений.

Детальный разбор нод Try, Catch, Active Branch Inverter. Механизм обработки исключений в Knime и его особенности.

По ссылке ниже ролик с подробным рассказом о создании этого дашборда и объяснением используемых нод.




Если не указать вход для Active Branch InverterВ таком случае вторая ветка никогда не будет активирована и в случае ошибки в основном блоке, блок Catch Errors получит обе ветки не активные.Важно, на данным момент, если обе ветки не активныеи выход у Catch Errors не активен, это не приводитк ошибке выполнения.Так же происходит и при явной ошибке в обоих ветках. Если указать вход для Active Branch Inverter до блока с ошибкойВ таком случае вторая ветка не будет активирована и в случае ошибки в основном блоке, блок Catch Errors получит обе ветки не активные.Если рассматривать пример в языках программирования,то там такое невозможно сделать. Так как не позволитсинтаксис операторов. Элементов может быть много, переключение произойдет в любом случае.При любом количестве элементов, переключение на вторую ветку, лучше ставить в конце основного блока.Переключение в данном случае произойдет корректно, а все дополнительные блоки обработки выполнены в любом случае не будут. Логика работы. Активнные линии.Все ошибки, которые происходят между нодами try и catch, не приводят к ошибке выполнения всего потока обработки.Вместо этого выход ноды, в которой произошла ошибка, становится не активным. И далее все ноды по цепочке, так же становятся не активными.А финальная нода Catch, выбирает, если на нулевом (верхнем) порту линия не активна, то взять данные с первого (нижнего) порта. При этом если нижний порт так же не активен, то этотранслируется дальше, т.е. становится состоянием самой ноды Catch. Вложенные try-catch. Более двух вариантов получения данных.Блоки try-catch могут быть вложенными не ограниченно количество раз. И если следовать всем правилам выше, то все будет работать корректно. Это может понадобится если, например, у вас более двух источников одних и тех же данных. В первую очередь, берем с основного, во вторую с дополнительного и уже если оба не отвечают, торезервный вариант. Ну и это сработает и для большего количества. Active Branch Inverter и Swith (IF)Active Branch Inverter может быть использован и в блоках Switch (IF). И будет вести себя ровно так же, просто переключая состояние линии с активной, на не активную и наоборот.Возможно это и не имеет практического смысла, но это во всяком случае так тоже работает. Аналог в языках программированияtry { основной код} end trycatch { код обработки исключения} end catchtry - блок содержит код, в котором может возникнуть исключение в момент его исполнения. Как правило это обращение к сторонним ресурсам, файлам и т.п.catch - блок кода, который вызывается, только в том случае, когда происходит исключение в основном блоке кода. основной кодTRYEND TRYCATCHEND CATCHкод обработкиисключенияCATCHкод обработкиисключенияTRYосновной кодEND CATCHTRYосновной кодEND TRYCATCHкод обработкиисключенияEND CATCHEND CATCHEND TRYCATCHкод обработкиисключенияосновной кодTRYTRYосновной кодEND CATCH альтенативный кодTRYосновной кодEND TRYCATCHкод обработкиисключенияEND CATCHВложенный TRY основной кодВложенныйEND CATCHВложенныйEND TRYCATCHNode 60Node 61CSV Reader Try (VariablePorts) Active BranchInverter Catch Errors(Data Ports) Table Creator Active BranchInverter Table Creator Try (VariablePorts) CSV Reader Catch Errors(Data Ports) Try (VariablePorts) CSV Reader Active BranchInverter Table Creator Catch Errors(Data Ports) Catch Errors(Data Ports) Active BranchInverter Table Creator CSV Reader Try (VariablePorts) Table Rowto Variable Variable toTable Row Try (VariablePorts) CSV Reader Catch Errors(Data Ports) CSV Reader Rule EngineVariable Rule EngineVariable Rule EngineVariable Table Rowto Variable Variable toTable Row Rule EngineVariable Try (VariablePorts) CSV Reader Active BranchInverter Table Creator Catch Errors(Data Ports) Try (VariablePorts) CSV Reader Catch Errors(Data Ports) Active BranchInverter Empty Table Switch CASE SwitchData (End) Table Creator Active BranchInverter Rule EngineVariable Rule EngineVariable Rule EngineVariable Rule EngineVariable Active BranchInverter Table Rowto Variable Table Rowto Variable Variable toTable Row Variable toTable Row Если не указать вход для Active Branch InverterВ таком случае вторая ветка никогда не будет активирована и в случае ошибки в основном блоке, блок Catch Errors получит обе ветки не активные.Важно, на данным момент, если обе ветки не активныеи выход у Catch Errors не активен, это не приводитк ошибке выполнения.Так же происходит и при явной ошибке в обоих ветках. Если указать вход для Active Branch Inverter до блока с ошибкойВ таком случае вторая ветка не будет активирована и в случае ошибки в основном блоке, блок Catch Errors получит обе ветки не активные.Если рассматривать пример в языках программирования,то там такое невозможно сделать. Так как не позволитсинтаксис операторов. Элементов может быть много, переключение произойдет в любом случае.При любом количестве элементов, переключение на вторую ветку, лучше ставить в конце основного блока.Переключение в данном случае произойдет корректно, а все дополнительные блоки обработки выполнены в любом случае не будут. Логика работы. Активнные линии.Все ошибки, которые происходят между нодами try и catch, не приводят к ошибке выполнения всего потока обработки.Вместо этого выход ноды, в которой произошла ошибка, становится не активным. И далее все ноды по цепочке, так же становятся не активными.А финальная нода Catch, выбирает, если на нулевом (верхнем) порту линия не активна, то взять данные с первого (нижнего) порта. При этом если нижний порт так же не активен, то этотранслируется дальше, т.е. становится состоянием самой ноды Catch. Вложенные try-catch. Более двух вариантов получения данных.Блоки try-catch могут быть вложенными не ограниченно количество раз. И если следовать всем правилам выше, то все будет работать корректно. Это может понадобится если, например, у вас более двух источников одних и тех же данных. В первую очередь, берем с основного, во вторую с дополнительного и уже если оба не отвечают, торезервный вариант. Ну и это сработает и для большего количества. Active Branch Inverter и Swith (IF)Active Branch Inverter может быть использован и в блоках Switch (IF). И будет вести себя ровно так же, просто переключая состояние линии с активной, на не активную и наоборот.Возможно это и не имеет практического смысла, но это во всяком случае так тоже работает. Аналог в языках программированияtry { основной код} end trycatch { код обработки исключения} end catchtry - блок содержит код, в котором может возникнуть исключение в момент его исполнения. Как правило это обращение к сторонним ресурсам, файлам и т.п.catch - блок кода, который вызывается, только в том случае, когда происходит исключение в основном блоке кода. основной кодTRYEND TRYCATCHEND CATCHкод обработкиисключенияCATCHкод обработкиисключенияTRYосновной кодEND CATCHTRYосновной кодEND TRYCATCHкод обработкиисключенияEND CATCHEND CATCHEND TRYCATCHкод обработкиисключенияосновной кодTRYTRYосновной кодEND CATCH альтенативный кодTRYосновной кодEND TRYCATCHкод обработкиисключенияEND CATCHВложенный TRY основной кодВложенныйEND CATCHВложенныйEND TRYCATCHNode 60Node 61CSV Reader Try (VariablePorts) Active BranchInverter Catch Errors(Data Ports) Table Creator Active BranchInverter Table Creator Try (VariablePorts) CSV Reader Catch Errors(Data Ports) Try (VariablePorts) CSV Reader Active BranchInverter Table Creator Catch Errors(Data Ports) Catch Errors(Data Ports) Active BranchInverter Table Creator CSV Reader Try (VariablePorts) Table Rowto Variable Variable toTable Row Try (VariablePorts) CSV Reader Catch Errors(Data Ports) CSV Reader Rule EngineVariable Rule EngineVariable Rule EngineVariable Table Rowto Variable Variable toTable Row Rule EngineVariable Try (VariablePorts) CSV Reader Active BranchInverter Table Creator Catch Errors(Data Ports) Try (VariablePorts) CSV Reader Catch Errors(Data Ports) Active BranchInverter Empty Table Switch CASE SwitchData (End) Table Creator Active BranchInverter Rule EngineVariable Rule EngineVariable Rule EngineVariable Rule EngineVariable Active BranchInverter Table Rowto Variable Table Rowto Variable Variable toTable Row Variable toTable Row

Nodes

Extensions

Links