code: def get_value(self, section, option, default=None):
          
          try:
              valuestr = self.get(section, option)
          except Exception:
              if default is not None:
                  return default
              raise
  
          types = (int, float)
          for numtype in types:
              try:
                  val = numtype(valuestr)
  
                  # truncated value ?
                  if val != float(valuestr):
                      continue
  
                  return val
              except (ValueError, TypeError):
                  continue
          # END for each numeric type
  
          # try boolean values as git uses them
          vl = valuestr.lower()
          if vl == 'false':
              return False
          if vl == 'true':
              return True
  
          if not isinstance(valuestr, string_types):
              raise TypeError("Invalid value type: only int, long, float and str are allowed", valuestr)
  
          return valuestr
docs: :param default:
              If not None, the given default value will be returned in case
              the option did not exist
          :return: a properly typed value, either int, float or string
  
          :raise TypeError: in case the value could not be understood
              Otherwise the exceptions known to the ConfigParser will be raised.