diff --git a/django/template/__init__.py b/django/template/__init__.py
index 5493e5b..14eea5c 100644
--- a/django/template/__init__.py
+++ b/django/template/__init__.py
@@ -830,9 +830,7 @@ class VariableNode(Node):
             return ''
         return _render_value_in_context(output, context)
 
-def generic_tag_compiler(params, defaults, name, node_class, parser, token):
-    "Returns a template.Node subclass."
-    bits = token.split_contents()[1:]
+def match_number_of_arguments(bits, params, defaults, name):
     bmax = len(params)
     def_len = defaults and len(defaults) or 0
     bmin = bmax - def_len
@@ -842,6 +840,11 @@ def generic_tag_compiler(params, defaults, name, node_class, parser, token):
         else:
             message = "%s takes between %s and %s arguments" % (name, bmin, bmax)
         raise TemplateSyntaxError(message)
+
+def generic_tag_compiler(params, defaults, name, node_class, parser, token):
+    "Returns a template.Node subclass."
+    bits = token.split_contents()[1:]
+    match_number_of_arguments(bits, params, defaults, name)
     return node_class(bits)
 
 class Library(object):
