code: def _exception_message(excp):
      
      if isinstance(excp, Py4JJavaError):
          # 'Py4JJavaError' doesn't contain the stack trace available on the Java side in 'message'
          # attribute in Python 2. We should call 'str' function on this exception in general but
          # 'Py4JJavaError' has an issue about addressing non-ascii strings. So, here we work
          # around by the direct call, '__str__()'. Please see SPARK-23517.
          return excp.__str__()
      if hasattr(excp, "message"):
          return excp.message
      return str(excp)
docs: Return the message from an exception as either a str or unicode object.  Supports both
      Python 2 and Python 3.
  
      >>> msg = "Exception message"
      >>> excp = Exception(msg)
      >>> msg == _exception_message(excp)
      True
  
      >>> msg = u"unicöde"
      >>> excp = Exception(msg)
      >>> msg == _exception_message(excp)
      True