ENH: Improve Python errors of mismatched types
Summary
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.
Rationale
When we pass data of the wrong type or even None
to 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
Implementation Details
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).
Tests
No extra test has been written. All preexisting tests shall continue to work.
Copyright
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 -i
on latest changes and commit