@@ -279,7 +279,11 @@ def get_all_cases(cases=None, # type: Union[Callable[[Any], Any],
279279 for m in module :
280280 m = sys .modules [this_module_object .__module__ ] if m is THIS_MODULE else m
281281 _cases += extract_cases_from_module (m , has_tag = has_tag , filter = filter )
282+ success = True
282283 except TypeError :
284+ success = False
285+
286+ if not success :
283287 # 'module' object is not iterable: a single module was provided
284288 m = sys .modules [this_module_object .__module__ ] if module is THIS_MODULE else module
285289 _cases = extract_cases_from_module (m , has_tag = has_tag , filter = filter )
@@ -349,6 +353,21 @@ def extract_cases_from_module(module, # type: ModuleType
349353 return cases
350354
351355
356+ class InvalidNamesTemplateException (Exception ):
357+ """
358+ Raised when a `@cases_generator` is used with an improper name template and formatting fails.
359+ """
360+ def __init__ (self , cases_func , names_template , params ):
361+ self .cases_func = cases_func
362+ self .names_template = names_template
363+ self .params = params
364+ super (InvalidNamesTemplateException , self ).__init__ ()
365+
366+ def __str__ (self ):
367+ return "Error creating the case name for case generator <%s> using name template '%s' with parameter values " \
368+ "%s. Please check the name template." % (self .cases_func .__name__ , self .names_template , self .params )
369+
370+
352371def _get_case_getter_s (f ,
353372 f_code = None ,
354373 cases_dct = None ):
@@ -381,7 +400,10 @@ def _get_case_getter_s(f,
381400 # then this is a string formatter creating the names
382401 _formatter = names
383402 def names (** params ):
384- return _formatter .format (** params )
403+ try :
404+ return _formatter .format (** params )
405+ except Exception :
406+ raise InvalidNamesTemplateException (f , _formatter , params )
385407
386408 nb_cases_generated = len (all_param_values_combinations )
387409 if not callable (names ):
0 commit comments