# Buggy code
def get_default_values(self):
    """Overriding to make updating the defaults after instantiation of
    the option parser possible, _update_defaults() does the dirty work."""
    if not self.process_default_values:
        # Old, pre-Optik 1.5 behaviour.
        return optparse.Values(self.defaults)

    defaults = self._update_defaults(self.defaults.copy())  # ours
    for option in self._get_all_options():
        default = defaults.get(option.dest)
        if isinstance(default, string_types):
            opt_str = option.get_opt_string()
            defaults[option.dest] = option.check_value(opt_str, default)
    return optparse.Values(defaults)


# Traceback (UnicodeDecodeError)
C:\Users\cyl>pip list
Traceback (most recent call last):
File "C:\Users\cyl\AppData\Local\Programs\Python\Python35\Scripts\pip-script.py", line 11, in <module>
load_entry_point('pip==10.0.0.dev0', 'console_scripts', 'pip')()
File "c:\users\cyl\appdata\local\programs\python\python35\lib\site-packages\pip-10.0.0.dev0-py3.5.egg\pip\_internal\__init__.py", line 229, in main
cmd_name, cmd_args = parseopts(args)
File "c:\users\cyl\appdata\local\programs\python\python35\lib\site-packages\pip-10.0.0.dev0-py3.5.egg\pip\_internal\__init__.py", line 178, in parseopts
general_options, args_else = parser.parse_args(args)
File "C:\Users\cyl\AppData\Local\Programs\Python\Python35\lib\optparse.py", line 1370, in parse_args
values = self.get_default_values()
File "c:\users\cyl\appdata\local\programs\python\python35\lib\site-packages\pip-10.0.0.dev0-py3.5.egg\pip\_internal\baseparser.py", line 227, in get_default_values
defaults = self._update_defaults(self.defaults.copy())  # ours
File "c:\users\cyl\appdata\local\programs\python\python35\lib\site-packages\pip-10.0.0.dev0-py3.5.egg\pip\_internal\baseparser.py", line 181, in _update_defaults
self.config.load()
File "c:\users\cyl\appdata\local\programs\python\python35\lib\site-packages\pip-10.0.0.dev0-py3.5.egg\pip\_internal\configuration.py", line 111, in load
self._load_config_files()
File "c:\users\cyl\appdata\local\programs\python\python35\lib\site-packages\pip-10.0.0.dev0-py3.5.egg\pip\_internal\configuration.py", line 262, in _load_config_files
parser = self._load_file(variant, fname)
File "c:\users\cyl\appdata\local\programs\python\python35\lib\site-packages\pip-10.0.0.dev0-py3.5.egg\pip\_internal\configuration.py", line 270, in _load_file
parser = self._construct_parser(fname)
File "c:\users\cyl\appdata\local\programs\python\python35\lib\site-packages\pip-10.0.0.dev0-py3.5.egg\pip\_internal\configuration.py", line 286, in _construct_parser
parser.read(fname)
File "C:\Users\cyl\AppData\Local\Programs\Python\Python35\lib\configparser.py", line 696, in read
self._read(fp, filename)
File "C:\Users\cyl\AppData\Local\Programs\Python\Python35\lib\configparser.py", line 1012, in _read
for lineno, line in enumerate(fp, start=1):
UnicodeDecodeError: 'gbk' codec can't decode byte 0x90 in position 101: illegal multibyte sequence

# Fixed code
def get_default_values(self):
    """Overriding to make updating the defaults after instantiation of
    the option parser possible, _update_defaults() does the dirty work."""
    if not self.process_default_values:
        # Old, pre-Optik 1.5 behaviour.
        return optparse.Values(self.defaults)

    # Load the configuration, or error out in case of an error
    try:
        self.config.load()
    except ConfigurationError as err:
        self.exit(2, err.args[0])

    defaults = self._update_defaults(self.defaults.copy())  # ours
    for option in self._get_all_options():
        default = defaults.get(option.dest)
        if isinstance(default, string_types):
            opt_str = option.get_opt_string()
            defaults[option.dest] = option.check_value(opt_str, default)
    return optparse.Values(defaults)