class_docstr: Geocoder using the Geocod.io API.
  
  Documentation at:
      https://www.geocod.io/docs/
  
  Pricing details:
      https://www.geocod.io/pricing/
  
  .. versionadded:: 2.2
class_docstr_tok: ["Geocoder","using","the","Geocod.io","API",".","Documentation","at",":","https",":","\/\/www.geocod.io\/docs\/","Pricing","details",":","https",":","\/\/www.geocod.io\/pricing\/","..","versionadded",":",":","2.2"]
docstr: Custom exception handling for invalid queries and exceeded quotas.
  
  Geocod.io returns a ``422`` status code for invalid queries, which is not mapped
  in :const:`~geopy.geocoders.base.ERROR_CODE_MAP`. The service also returns a
  ``403`` status code for exceeded quotas instead of the ``429`` code mapped in
  :const:`~geopy.geocoders.base.ERROR_CODE_MAP`
docstr_tok: ["Custom","exception","handling","for","invalid","queries","and","exceeded","quotas",".","Geocod.io","returns","a","``","422","``","status","code","for","invalid","queries",",","which","is","not","mapped","in",":","const",":","`","~geopy.geocoders.base.ERROR_CODE_MAP","`",".","The","service","also","returns","a","``","403","``","status","code","for","exceeded","quotas","instead","of","the","``","429","``","code","mapped","in",":","const",":","`","~geopy.geocoders.base.ERROR_CODE_MAP","`"]
code: def _geocoder_exception_handler(self, error):
      """Custom exception handling for invalid queries and exceeded quotas.
  
      Geocod.io returns a ``422`` status code for invalid queries, which is not mapped
      in :const:`~geopy.geocoders.base.ERROR_CODE_MAP`. The service also returns a
      ``403`` status code for exceeded quotas instead of the ``429`` code mapped in
      :const:`~geopy.geocoders.base.ERROR_CODE_MAP`
      """
      if not isinstance(error, AdapterHTTPError):
          return
      if error.status_code is None or error.text is None:
          return
      if error.status_code == 422:
          error_message = self._get_error_message(error)
          if (
              "could not geocode address" in error_message.lower()
              and "postal code or city required"
              in error_message.lower()
          ):
              return NONE_RESULT
          raise GeocoderQueryError(error_message) from error
      if error.status_code == 403:
          error_message = self._get_error_message(error)
          quota_exceeded_snippet = (
              "You can't make this request as it is "
              "above your daily maximum."
          )
          if quota_exceeded_snippet in error_message:
              raise GeocoderQuotaExceeded(error_message) from error
  
file_path: geopy/geopy/geocoders/geocodio.py
imports: import collections.abc
  import json
  from functools import partial
  from urllib.parse import urlencode
  from geopy.adapters import AdapterHTTPError
  from geopy.exc import GeocoderQueryError, GeocoderQuotaExceeded
  from geopy.geocoders.base import DEFAULT_SENTINEL, NONE_RESULT, Geocoder
  from geopy.location import Location
  from geopy.util import logger
label_desc: Use image node_id 5 for calling the Geocodio obj's underlying member method code with example usage: obj._geocoder_exception_handler(error) and returns: NONE_RESULT