required=True,
                             help=_('YAML template or CSAR file to parse.'))
 
-        parser.add_argument('-nrpv', dest='no_required_paras_valid',
+        parser.add_argument('-nrpv', dest='no_required_paras_check',
                             action='store_true', default=False,
                             help=_('Ignore input parameter validation '
                                    'when parse template.'))
 
+        parser.add_argument('--debug', dest='debug_mode',
+                            action='store_true', default=False,
+                            help=_('debug mode for print more details '
+                                   'other than raise exceptions when '
+                                   'errors happen as possible'))
+
         return parser
 
     def main(self, argv):
         parser = self.get_parser(argv)
         (args, extra_args) = parser.parse_known_args(argv)
         path = args.template_file
-        nrpv = args.no_required_paras_valid
+        nrpv = args.no_required_paras_check
+        debug = args.debug_mode
+
         if os.path.isfile(path):
-            self.parse(path, no_req_paras_valid=nrpv)
+            self.parse(path, no_required_paras_check=nrpv, debug_mode=debug)
         elif toscaparser.utils.urlutils.UrlUtils.validate_url(path):
-            self.parse(path, False, no_req_paras_valid=nrpv)
+            self.parse(path, False,
+                       no_required_paras_check=nrpv,
+                       debug_mode=debug)
         else:
             raise ValueError(_('"%(path)s" is not a valid file.')
                              % {'path': path})
 
-    def parse(self, path, a_file=True, no_req_paras_valid=False):
-        output = None
-        tosca = None
+    def parse(self, path, a_file=True, no_required_paras_check=False,
+              debug_mode=False):
+        nrpv = no_required_paras_check
         try:
             tosca = ToscaTemplate(path, None, a_file,
-                                  no_required_paras_valid=no_req_paras_valid)
+                                  no_required_paras_check=nrpv,
+                                  debug_mode=debug_mode)
         except ValidationError as e:
             msg = _('  ===== main service template ===== ')
             log.error(msg)
             log.error(e.message)
-            raise e
-
-        version = tosca.version
-        if tosca.version:
+            if debug_mode:
+                print(msg)
+                print(e.message)
+            else:
+                raise e
+
+        version = tosca.version if tosca else "unknown"
+        if tosca and tosca.version:
             print("\nversion: " + version)
 
-        if hasattr(tosca, 'description'):
+        if tosca and hasattr(tosca, 'description'):
             description = tosca.description
             if description:
                 print("\ndescription: " + description)
 
-        if hasattr(tosca, 'inputs'):
+        if tosca and hasattr(tosca, 'inputs'):
             inputs = tosca.inputs
             if inputs:
                 print("\ninputs:")
                 for input in inputs:
                     print("\t" + input.name)
 
-        if hasattr(tosca, 'nodetemplates'):
+        if tosca and hasattr(tosca, 'nodetemplates'):
             nodetemplates = tosca.nodetemplates
             if nodetemplates:
                 print("\nnodetemplates:")
                         for trigger in policy.triggers:
                             print("\ttrigger name:" + trigger.name)'''
 
-        if hasattr(tosca, 'outputs'):
+        if tosca and hasattr(tosca, 'outputs'):
             outputs = tosca.outputs
             if outputs:
                 print("\noutputs:")
 
     '''Load the template data.'''
     def __init__(self, path=None, parsed_params=None, a_file=True,
                  yaml_dict_tpl=None, sub_mapped_node_template=None,
-                 no_required_paras_valid=False):
+                 no_required_paras_check=False,
+                 debug_mode=False):
         if sub_mapped_node_template is None:
             ExceptionCollector.start()
         self.a_file = a_file
         self.sub_mapped_node_template = sub_mapped_node_template
         self.nested_tosca_tpls_with_topology = {}
         self.nested_tosca_templates_with_topology = []
-        self.no_required_paras_valid = no_required_paras_valid
+        self.no_required_paras_check = no_required_paras_check
+        self.debug_mode = debug_mode
+
         if path:
             self.input_path = path
             self.path = self._get_path(path)
                         deepcopy(ExceptionCollector.collecting)
                     nested_template = None
                     try:
-                        nrpv = self.no_required_paras_valid
+                        nrpv = self.no_required_paras_check
                         nested_template = ToscaTemplate(
                             path=fname, parsed_params=parsed_params,
                             sub_mapped_node_template=nodetemplate,
-                            no_required_paras_valid=nrpv)
+                            no_required_paras_check=nrpv)
                     except ValidationError as e:
                         msg = _('  ===== nested service template ===== ')
                         log.error(msg)
                         log.error(e.message)
-                        raise e
+                        if self.debug_mode:
+                            print(msg)
+                            print(e.message)
+                        else:
+                            raise e
 
                     ExceptionCollector.exceptions = deepcopy(cache_exeptions)
                     ExceptionCollector.collecting = \
 
     def verify_template(self):
         if ExceptionCollector.exceptionsCaught():
-            if self.no_required_paras_valid:
+            if self.no_required_paras_check:
                 ExceptionCollector.removeException(
                     MissingRequiredParameterError)
 
             if self.input_path:
-                raise ValidationError(
+                exceptions = ValidationError(
                     message=(_('\nThe input "%(path)s" failed validation with '
                                'the following error(s): \n\n\t')
                              % {'path': self.input_path}) +
                     '\n\t'.join(ExceptionCollector.getExceptionsReport()))
             else:
-                raise ValidationError(
+                exceptions = ValidationError(
                     message=_('\nThe pre-parsed input failed validation with '
                               'the following error(s): \n\n\t') +
                     '\n\t'.join(ExceptionCollector.getExceptionsReport()))
+            if not self.debug_mode:
+                raise exceptions
+            else:
+                print(exceptions.message)
+            log.error(exceptions.message)
         else:
             if self.input_path:
                 msg = (_('The input "%(path)s" successfully passed '