code: def ip_address(address):
      
      try:
          return IPv4Address(address)
      except (AddressValueError, NetmaskValueError):
          pass
  
      try:
          return IPv6Address(address)
      except (AddressValueError, NetmaskValueError):
          pass
  
      if isinstance(address, bytes):
          raise AddressValueError(
              '%r does not appear to be an IPv4 or IPv6 address. '
              'Did you pass in a bytes (str in Python 2) instead of'
              ' a unicode object?' % address)
  
      raise ValueError('%r does not appear to be an IPv4 or IPv6 address' %
                       address)
docs: Take an IP string/int and return an object of the correct type.
  
      Args:
          address: A string or integer, the IP address.  Either IPv4 or
            IPv6 addresses may be supplied; integers less than 2**32 will
            be considered to be IPv4 by default.
  
      Returns:
          An IPv4Address or IPv6Address object.
  
      Raises:
          ValueError: if the *address* passed isn't either a v4 or a v6
            address