diff --git a/lib/ansible/module_utils/basic.py b/lib/ansible/module_utils/basic.py
index 072f653a5b..70a55b3dcc 100644
--- a/lib/ansible/module_utils/basic.py
+++ b/lib/ansible/module_utils/basic.py
@@ -2134,6 +2134,11 @@ class AnsibleModule(object):
         if 'changed' not in kwargs:
             kwargs['changed'] = False
 
+        # add traceback if debug or high verbosity and it is missing
+        # Note: badly named as exception, it is really always been 'traceback'
+        if 'exception' not in kwargs and sys.exc_info()[2] and (self._debug or self._verbosity >= 3):
+            kwargs['exception'] = ''.join(traceback.format_tb(sys.exc_info()[2]))
+
         self.do_cleanup_files()
         self._return_formatted(kwargs)
         sys.exit(1)