@@ -279,7 +279,11 @@ def get_all_cases(cases=None, # type: Union[Callable[[Any], Any],
279
279
for m in module :
280
280
m = sys .modules [this_module_object .__module__ ] if m is THIS_MODULE else m
281
281
_cases += extract_cases_from_module (m , has_tag = has_tag , filter = filter )
282
+ success = True
282
283
except TypeError :
284
+ success = False
285
+
286
+ if not success :
283
287
# 'module' object is not iterable: a single module was provided
284
288
m = sys .modules [this_module_object .__module__ ] if module is THIS_MODULE else module
285
289
_cases = extract_cases_from_module (m , has_tag = has_tag , filter = filter )
@@ -349,6 +353,21 @@ def extract_cases_from_module(module, # type: ModuleType
349
353
return cases
350
354
351
355
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
+
352
371
def _get_case_getter_s (f ,
353
372
f_code = None ,
354
373
cases_dct = None ):
@@ -381,7 +400,10 @@ def _get_case_getter_s(f,
381
400
# then this is a string formatter creating the names
382
401
_formatter = names
383
402
def names (** params ):
384
- return _formatter .format (** params )
403
+ try :
404
+ return _formatter .format (** params )
405
+ except Exception :
406
+ raise InvalidNamesTemplateException (f , _formatter , params )
385
407
386
408
nb_cases_generated = len (all_param_values_combinations )
387
409
if not callable (names ):
0 commit comments