Improve bad preferred challenge error message
diff --git a/certbot/cli.py b/certbot/cli.py
index d505334a01b..7df3fe05d13 100644
--- a/certbot/cli.py
+++ b/certbot/cli.py
@@ -1295,7 +1295,7 @@ def __call__(self, parser, namespace, pref_challs, option_string=None):
         try:
             challs = parse_preferred_challenges(pref_challs.split(","))
         except errors.Error as error:
-            raise argparse.ArgumentTypeError(str(error))
+            raise argparse.ArgumentError(self, str(error))
         namespace.pref_challs.extend(challs)
 
 
diff --git a/certbot/tests/cli_test.py b/certbot/tests/cli_test.py
index d29f7c1b6e0..f18da240a3e 100644
--- a/certbot/tests/cli_test.py
+++ b/certbot/tests/cli_test.py
@@ -211,7 +211,10 @@ def test_preferred_challenges(self):
         self.assertEqual(namespace.pref_challs, expected)
 
         short_args = ['--preferred-challenges', 'jumping-over-the-moon']
-        self.assertRaises(argparse.ArgumentTypeError, self.parse, short_args)
+        # argparse.ArgumentError makes argparse print more information
+        # to stderr and call sys.exit()
+        with mock.patch('sys.stderr'):
+            self.assertRaises(SystemExit, self.parse, short_args)
 
     def test_server_flag(self):
         namespace = self.parse('--server example.com'.split())

Using ArgumentTypeError causes Certbot to report an unexpected error occurred while using ArgumentError causes argparse to print more usage information and call sys.exit().