diff --git a/django/core/management/__init__.py b/django/core/management/__init__.py
index 7638937..0cdfbef 100644
--- a/django/core/management/__init__.py
+++ b/django/core/management/__init__.py
@@ -160,6 +160,7 @@ def call_command(name, *args, **options):
 
     return klass.execute(*args, **defaults)
 
+
 class LaxOptionParser(OptionParser):
     """
     An option parser that doesn't raise any errors on unknown options.
@@ -167,23 +168,24 @@ class LaxOptionParser(OptionParser):
     This is needed because the --settings and --pythonpath options affect
     the commands (and thus the options) that are available to the user.
     """
+    def __init__(self, utility, **kwargs):
+        self.utility = utility
+        OptionParser.__init__(self, **kwargs)
+
     def error(self, msg):
         pass
 
     def print_help(self):
-        """Output nothing.
-
-        The lax options are included in the normal option parser, so under
-        normal usage, we don't need to print the lax options.
         """
-        pass
-
-    def print_lax_help(self):
-        """Output the basic options available to every command.
-
-        This just redirects to the default print_help() behavior.
+        Either output the general help or trigger the help output of any
+        subcommand.
         """
-        OptionParser.print_help(self)
+        if len(self.largs) > 1 and self.largs[-1] != 'help':
+            # Calling help for subcommand instead
+            self.utility.fetch_command(self.largs[-1]).print_help(*self.largs)
+        else:
+            OptionParser.print_help(self)
+            sys.stdout.write(self.utility.main_help_text() + '\n')
 
     def _process_args(self, largs, rargs, values):
         """
@@ -211,9 +213,10 @@ class LaxOptionParser(OptionParser):
                     # dealing with options
                     del rargs[0]
                     raise Exception
-            except:
+            except Exception:
                 largs.append(arg)
 
+
 class ManagementUtility(object):
     """
     Encapsulates the logic of the django-admin.py and manage.py utilities.
@@ -355,15 +358,13 @@ class ManagementUtility(object):
         # Preprocess options to extract --settings and --pythonpath.
         # These options could affect the commands that are available, so they
         # must be processed early.
-        parser = LaxOptionParser(usage="%prog subcommand [options] [args]",
+        parser = LaxOptionParser(self,
+                                 usage="%prog subcommand [options] [args]",
                                  version=get_version(),
                                  option_list=BaseCommand.option_list)
         self.autocomplete()
-        try:
-            options, args = parser.parse_args(self.argv)
-            handle_default_options(options)
-        except:
-            pass # Ignore any option errors at this point.
+        options, args = parser.parse_args(self.argv)
+        handle_default_options(options)
 
         try:
             subcommand = self.argv[1]
@@ -372,22 +373,13 @@ class ManagementUtility(object):
 
         if subcommand == 'help':
             if len(args) <= 2:
-                parser.print_lax_help()
-                sys.stdout.write(self.main_help_text() + '\n')
+                parser.print_help()
             elif args[2] == '--commands':
                 sys.stdout.write(self.main_help_text(commands_only=True) + '\n')
             else:
                 self.fetch_command(args[2]).print_help(self.prog_name, args[2])
         elif subcommand == 'version':
             sys.stdout.write(parser.get_version() + '\n')
-        # Special-cases: We want 'django-admin.py --version' and
-        # 'django-admin.py --help' to work, for backwards compatibility.
-        elif self.argv[1:] == ['--version']:
-            # LaxOptionParser already takes care of printing the version.
-            pass
-        elif self.argv[1:] in (['--help'], ['-h']):
-            parser.print_lax_help()
-            sys.stdout.write(self.main_help_text() + '\n')
         else:
             self.fetch_command(subcommand).run_from_argv(self.argv)
 
diff --git a/tests/admin_scripts/tests.py b/tests/admin_scripts/tests.py
index baec168..d255318 100644
--- a/tests/admin_scripts/tests.py
+++ b/tests/admin_scripts/tests.py
@@ -1217,6 +1217,9 @@ class CommandTypes(AdminScriptTestCase):
         "--version is equivalent to version"
         args1, args2 = ['version'], ['--version']
         self.assertEqual(self.run_manage(args1), self.run_manage(args2))
+        # Whatever the accompanying command, --version always quit
+        args3 = ['grumble', '--version']
+        self.assertEqual(self.run_manage(args1), self.run_manage(args3))
 
     def test_help(self):
         "help is handled as a special case"
