diff --git a/news/5644.bugfix b/news/5644.bugfix new file mode 100644 index 00000000000..39b72077266 --- /dev/null +++ b/news/5644.bugfix @@ -0,0 +1 @@ +Show a better error message when a configuration option has an invalid value. \ No newline at end of file diff --git a/src/pip/_internal/baseparser.py b/src/pip/_internal/baseparser.py index 9a8d129747e..f2f205f8a05 100644 --- a/src/pip/_internal/baseparser.py +++ b/src/pip/_internal/baseparser.py @@ -192,7 +192,14 @@ def _update_defaults(self, defaults): continue if option.action in ('store_true', 'store_false', 'count'): - val = strtobool(val) + try: + val = strtobool(val) + except ValueError: + error_msg = invalid_config_error_message( + option.action, key, val + ) + self.error(error_msg) + elif option.action == 'append': val = val.split() val = [self.check_default(option, key, v) for v in val] @@ -238,3 +245,16 @@ def get_default_values(self): def error(self, msg): self.print_usage(sys.stderr) self.exit(2, "%s\n" % msg) + + +def invalid_config_error_message(action, key, val): + """Returns a better error message when invalid configuration option + is provided.""" + if action in ('store_true', 'store_false'): + return ("{0} is not a valid value for {1} option, " + "please specify a boolean value like yes/no, " + "true/false or 1/0 instead.").format(val, key) + + return ("{0} is not a valid value for {1} option, " + "please specify a numerical value like 1/0 " + "instead.").format(val, key)