'Get an option
section=None: attribute a default section name
default: default value (if not specified, an exception
will be raised if option doesn\'t exist)'

def get(self, section, option, default=NoDefault):

    section = self._check_section_option(section, option)
    if (not self.has_section(section)):
        if (default is NoDefault):
            raise cp.NoSectionError(section)
        else:
            self.add_section(section)
    if (not self.has_option(section, option)):
        if (default is NoDefault):
            raise cp.NoOptionError(option, section)
        else:
            self.set(section, option, default)
            return default
    value = cp.ConfigParser.get(self, section, option, raw=self.raw)
    default_value = self.get_default(section, option)
    if isinstance(default_value, bool):
        value = ast.literal_eval(value)
    elif isinstance(default_value, float):
        value = float(value)
    elif isinstance(default_value, int):
        value = int(value)
    elif is_text_string(default_value):
        if PY2:
            try:
                value = value.decode('utf-8')
                try:
                    new_value = ast.literal_eval(value)
                    if is_text_string(new_value):
                        value = new_value
                except (SyntaxError, ValueError):
                    pass
            except (UnicodeEncodeError, UnicodeDecodeError):
                pass
    else:
        try:
            value = ast.literal_eval(value)
        except (SyntaxError, ValueError):
            pass
    return value
