Source code for swot_simulator.exception

# Copyright (c) 2021 CNES/JPL
#
# All rights reserved. Use of this source code is governed by a
# BSD-style license that can be found in the LICENSE file.
"""
Exception handlers
------------------
"""
import linecache
import os
import traceback


[docs]def structured_traceback(exc: Exception, call_stack: traceback.StackSummary) -> str: """Return a nice text describing the call stack which threw an exception. Args: exc (Exception): Exception raised. call_stack (traceback.StackSummary): Exception call stack thrown out. Returns: str: The text representing the call stack of the thrown exception. """ exc_name = "%s.%s" % (exc.__module__, exc.__class__.__name__) if hasattr( exc, '__module__') else exc.__class__.__name__ message = ["%s - Traceback (most recent call last):" % exc_name] for source, line_number, function, _ in call_stack: message.append("%s in %s" % (os.path.abspath(source), function)) # Reading the Python code lines = linecache.getlines(source) # We will display the Python source code around the call so that # the user visualizes the incriminated lines well. start = line_number - 3 end = line_number + 2 start = max(start, 0) # Add the Python source code for idx, item in enumerate(lines[start:end]): where = start + idx + 1 message.append(("----> " if where == line_number else " ") + str(where) + " " + item.rstrip()) message.append("") # Finally, displays the error message message.append(exc_name + ": " + str(exc)) return "\n".join(message)