code: def traverse_ruffus_exception(exceptions, options, log):
      
  
      exit_codes = []
      for exc in exceptions:
          exit_code = do_ruffus_exception(exc, options, log)
          exit_codes.append(exit_code)
  
      return exit_codes[0]
docs: Traverse a RethrownJobError and output the exceptions
  
      Ruffus presents exceptions as 5 element tuples. The RethrownJobException
      has a list of exceptions like
          e.job_exceptions = [(5-tuple), (5-tuple), ...]
  
      ruffus < 2.7.0 had a bug with exception marshalling that would give
      different output whether the main or child process raised the exception.
      We no longer support this.
  
      Attempting to log the exception itself will re-marshall it to the logger
      which is normally running in another process. It's better to avoid re-
      marshalling.
  
      The exit code will be based on this, even if multiple exceptions occurred
      at the same time.