def ip_network(address, strict=True):
try:<EOL><INDENT>return IPv4Network(address, strict)<EOL><DEDENT>except (AddressValueError, NetmaskValueError):<EOL><INDENT>pass<EOL><DEDENT>try:<EOL><INDENT>return IPv6Network(address, strict)<EOL><DEDENT>except (AddressValueError, NetmaskValueError):<EOL><INDENT>pass<EOL><DEDENT>if isinstance(address, bytes):<EOL><INDENT>raise AddressValueError(<EOL>'<STR_LIT>'<EOL>'<STR_LIT>'<EOL>'<STR_LIT>' % address)<EOL><DEDENT>raise ValueError('<STR_LIT>' %<EOL>address)<EOL>
Take an IP string/int and return an object of the correct type.

    Args:
        address: A string or integer, the IP network.  Either IPv4 or
          IPv6 networks may be supplied; integers less than 2**32 will
          be considered to be IPv4 by default.

    Returns:
        An IPv4Network or IPv6Network object.

    Raises:
        ValueError: if the string passed isn't either a v4 or a v6
          address. Or if the network has host bits set.