This MR addresses and closes #2175 (closed): When using Python API for
app.SetParameterValue() with mismatching parameter types, the reported error is cryptic and doesn't help Python-developers to fix the function call. Scientific end-users would be even more troubled by such error messages.
When we pass data of the wrong type or even
otb.Application.SetParameterValue(), we have no way to know what we did wrong.
In the stack trace we see messages like:
File "/path/to/OTB-7.2.0-Linux64/lib/python/otbApplication.py", line 2920, in SetParameterString val = _otbApplication.Application_SetParameterString(self, parameter, value, hasUserValueFlag) TypeError: in method 'Application_SetParameterString', argument 3 of type 'std::string'
But, which parameter is it? What is its value?
Instead, we could have
File "/home/luc/dev/tests/OTB-7.2.0-Linux64/lib/python/otbApplication.py", line 3239, in SetParameterValue raise TypeError('Expected a string for %s, got %s for %s' % (paramKey, type(value), value)) TypeError: Expected a string for elev.geoid, got <class 'NoneType'> for None
An extra test on the real parameter types has been added for most expected types according to the actual parameters already identified.
Warning: However, this may disable implicit conversions that were previously accepted. We will need to analyse whether things like
myapp.SetParameterValue('a_string_parameter', 42) shall be rejected to force the use of
myapp.SetParameterValue('a_string_parameter', '42') instead (note the extra quotes around the literal constant number).
No extra test has been written. All preexisting tests shall continue to work.
The copyright owner is CSGroup France and has signed the ORFEO ToolBox Contributor License Agreement.
Check before merging:
- All discussions are resolved
- At least 2
👍votes from core developers, no 👎vote.
- The feature branch is (reasonably) up-to-date with the base branch
- Dashboard is green
- Copyright owner has signed the ORFEO ToolBox Contributor License Agreement
- Optionally, run
git diff develop... -U0 --no-color | clang-format-diff.py -p1 -ion latest changes and commit