From 57f3d3b34efa855eeeee9cab9109c2981dfbded8 Mon Sep 17 00:00:00 2001 From: David Yackzan Date: Thu, 25 Jan 2024 07:34:07 -0700 Subject: [PATCH] Add exception type to error output (#753) * Add exception type to error output Knowing the type of exception that occurred provides more context and makes launch exceptions easier to track down. * Add invalid_launch_file_error test Signed-off-by: David Yackzan Co-authored-by: Tyler Weaver --- launch/launch/invalid_launch_file_error.py | 2 +- .../launch/test_invalid_launch_file_error.py | 33 +++++++++++++++++++ 2 files changed, 34 insertions(+), 1 deletion(-) create mode 100644 launch/test/launch/test_invalid_launch_file_error.py diff --git a/launch/launch/invalid_launch_file_error.py b/launch/launch/invalid_launch_file_error.py index e990062f7..cc997b8bc 100644 --- a/launch/launch/invalid_launch_file_error.py +++ b/launch/launch/invalid_launch_file_error.py @@ -32,7 +32,7 @@ def __init__(self, extension='', *, likely_errors=None): ).format('multiple exceptions' if len(self._likely_errors) > 1 else 'exception', self._extension) for error in self._likely_errors: - self._error_message += '\n - {}'.format(error) + self._error_message += '\n - {}: {}'.format(type(error).__name__, error) self.__cause__ = self._likely_errors[0] diff --git a/launch/test/launch/test_invalid_launch_file_error.py b/launch/test/launch/test_invalid_launch_file_error.py new file mode 100644 index 000000000..8e6637e2c --- /dev/null +++ b/launch/test/launch/test_invalid_launch_file_error.py @@ -0,0 +1,33 @@ +# Copyright 2024 Open Source Robotics Foundation, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from launch.invalid_launch_file_error import InvalidLaunchFileError + + +def test_invalid_launch_file_error(): + try: + exception = KeyError('Test') + raise InvalidLaunchFileError(extension='.py', likely_errors=[exception]) + except InvalidLaunchFileError as ex: + assert 'KeyError' in ex.__str__() + + +def test_invalid_launch_file_errors(): + try: + exceptions = [ValueError('Test1'), AttributeError('Test2'), BufferError('Test3')] + raise InvalidLaunchFileError(extension='.py', likely_errors=exceptions) + except InvalidLaunchFileError as ex: + assert 'ValueError' in ex.__str__() + assert 'AttributeError' in ex.__str__() + assert 'BufferError' in ex.__str__()