code: def general_setting(key, default=None, expected_type=None, qsettings=None):
      
      if qsettings is None:
          qsettings = QSettings()
      try:
          if isinstance(expected_type, type):
              return qsettings.value(key, default, type=expected_type)
          else:
              return qsettings.value(key, default)
  
      except TypeError as e:
          LOGGER.debug('exception %s' % e)
          LOGGER.debug('%s %s %s' % (key, default, expected_type))
          return qsettings.value(key, default)
docs: Helper function to get a value from settings.
  
      :param key: Unique key for setting.
      :type key: basestring
  
      :param default: The default value in case of the key is not found or there
          is an error.
      :type default: basestring, None, boolean, int, float
  
      :param expected_type: The type of object expected.
      :type expected_type: type
  
      :param qsettings: A custom QSettings to use. If it's not defined, it will
          use the default one.
      :type qsettings: qgis.PyQt.QtCore.QSettings
  
      :returns: The value of the key in the setting.
      :rtype: object
  
      Note:
      The API for QSettings to get a value is different for PyQt and Qt C++.
      In PyQt we can specify the expected type.
      See: http://pyqt.sourceforge.net/Docs/PyQt4/qsettings.html#value