docs: def _get_key(key, scopes):
      """Get a key from the current scope"""
  
      # If the key is a dot
      if key == '.':
          # Then just return the current scope
          return scopes[0]
  
      # Loop through the scopes
      for scope in scopes:
          try:
              # For every dot seperated key
              for child in key.split('.'):
                  # Move into the scope
                  try:
                      # Try subscripting (Normal dictionaries)
                      scope = scope[child]
                  except (TypeError, AttributeError):
                      try:
                          # Try the dictionary (Complex types)
                          scope = scope.__dict__[child]
                      except (TypeError, AttributeError):
                          # Try as a list
                          scope = scope[int(child)]
  
              # Return an empty string if falsy, with two exceptions
              # 0 should return 0, and False should return False
              # While using is for this check is undefined it works and is fast
              if scope is 0:  # noqa: F632
                  return 0
              if scope is False:
                  return False
  
              try:
                  # This allows for custom falsy data types
                  # https://github.com/noahmorrison/chevron/issues/35
                  if scope._CHEVRON_return_scope_when_falsy:
                      return scope
              except AttributeError:
                  return scope or ''
          except (AttributeError, KeyError, IndexError, ValueError):
              # We couldn't find the key in the current scope
              # We'll try again on the next pass
              pass
  
      # We couldn't find the key in any of the scopes
      return ''