diff --git a/modules/core/include/opencv2/core/utility.hpp b/modules/core/include/opencv2/core/utility.hpp index dcb625b3de..1e44d2e626 100644 --- a/modules/core/include/opencv2/core/utility.hpp +++ b/modules/core/include/opencv2/core/utility.hpp @@ -618,7 +618,7 @@ For the described keys: # Bad call $ ./app -fps=aaa ERRORS: - Exception: can not convert: [aaa] to [double] + Parameter 'fps': can not convert: [aaa] to [double] @endcode */ class CV_EXPORTS CommandLineParser diff --git a/modules/core/src/command_line_parser.cpp b/modules/core/src/command_line_parser.cpp index 2753ef30a4..0c50391f57 100644 --- a/modules/core/src/command_line_parser.cpp +++ b/modules/core/src/command_line_parser.cpp @@ -97,23 +97,28 @@ void CommandLineParser::getByName(const String& name, bool space_delete, int typ { for (size_t j = 0; j < impl->data[i].keys.size(); j++) { - if (name.compare(impl->data[i].keys[j]) == 0) + if (name == impl->data[i].keys[j]) { String v = impl->data[i].def_value; if (space_delete) v = impl->cat_string(v); + + // it is an error if we just got the default value here + if(v.empty()) + break; + from_str(v, type, dst); return; } } } impl->error = true; - impl->error_message = impl->error_message + "Unknown parameter " + name + "\n"; + impl->error_message = impl->error_message + "Missing parameter: '" + name + "'\n"; } - catch (std::exception& e) + catch (Exception& e) { impl->error = true; - impl->error_message = impl->error_message + "Exception: " + String(e.what()) + "\n"; + impl->error_message = impl->error_message + "Parameter '"+ name + "': " + e.err + "\n"; } } @@ -128,17 +133,22 @@ void CommandLineParser::getByIndex(int index, bool space_delete, int type, void* { String v = impl->data[i].def_value; if (space_delete == true) v = impl->cat_string(v); + + // it is an error if we just got the default value here + if(v.empty()) + break; + from_str(v, type, dst); return; } } impl->error = true; - impl->error_message = impl->error_message + "Unknown parameter #" + format("%d", index) + "\n"; + impl->error_message = impl->error_message + "Missing parameter #" + format("%d", index) + "\n"; } - catch(std::exception & e) + catch(Exception& e) { impl->error = true; - impl->error_message = impl->error_message + "Exception: " + String(e.what()) + "\n"; + impl->error_message = impl->error_message + format("Parameter #%d: ", index) + e.err + "\n"; } }