W niektórych moich funkcjach chcę zamienić niektóre ostrzeżenia na błędy. Na przykład, jeśli chcę rzucać błąd podczas str2func
daje MATLAB:str2func:invalidFunctionName
ostrzeżenie, chciałbym wykonać następujące czynności:Konwersja ostrzeżeń na błędy w MATLAB
invalid_func_id = 'MATLAB:str2func:invalidFunctionName';
%hide warning of interest
warning('off', invalid_func_id);
%this might yield the warning of interest
predicate_func_try = str2func(predicate_func);
[~, warn_id] = lastwarn;
assert(~strcmp(warn_id, invalid_func_id)...
, 'MyFunc:InvalidFunctionName'...
, 'The predicate function %s does not have a valid name'...
, predicate_func...
);
warning on all
Działa to dobrze, jeśli wiem, że dany fragment kodu może dać niewielki zestaw ostrzeżeń. Jest to jednak pełne i prawdopodobnie nie skaluje się do większych bloków kodu. Czy jest lepszy sposób na zrobienie tego? Idealnie chciałbym funkcji, która może włączyć pewne ostrzeżenia do błędów w całym bloku. To pozwala mi zmienić moje przykład do:
warnings2errors('MATLAB:str2func:invalidFunctionName');
predicate_func_try = str2func(predicate_func);
warnings2errors('off');
Według tego wątku - http://www.mathworks.com/matlabcentral/newsreader/view_thread/158768 - na swój sposób jest tylko jeden. –