{"record":{"id":"2f51a6423feb9c9b","repo":"TheAlgorithms/Python","slug":"invalid-ipv4-address-format","errorCode":null,"errorMessage":"Invalid IPv4 address format","messagePattern":"Invalid IPv4 address format","errorType":"exception","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"conversions/ipv4_conversion.py","lineNumber":30,"sourceCode":"        int: The decimal representation of the IP address.\n\n    >>> ipv4_to_decimal(\"192.168.0.1\")\n    3232235521\n    >>> ipv4_to_decimal(\"10.0.0.255\")\n    167772415\n    >>> ipv4_to_decimal(\"10.0.255\")\n    Traceback (most recent call last):\n        ...\n    ValueError: Invalid IPv4 address format\n    >>> ipv4_to_decimal(\"10.0.0.256\")\n    Traceback (most recent call last):\n        ...\n    ValueError: Invalid IPv4 octet 256\n    \"\"\"\n\n    octets = [int(octet) for octet in ipv4_address.split(\".\")]\n    if len(octets) != 4:\n        raise ValueError(\"Invalid IPv4 address format\")\n\n    decimal_ipv4 = 0\n    for octet in octets:\n        if not 0 <= octet <= 255:\n            raise ValueError(f\"Invalid IPv4 octet {octet}\")  # noqa: EM102\n        decimal_ipv4 = (decimal_ipv4 << 8) + int(octet)\n\n    return decimal_ipv4\n\n\ndef alt_ipv4_to_decimal(ipv4_address: str) -> int:\n    \"\"\"\n    >>> alt_ipv4_to_decimal(\"192.168.0.1\")\n    3232235521\n    >>> alt_ipv4_to_decimal(\"10.0.0.255\")\n    167772415\n    \"\"\"\n    return int(\"0x\" + \"\".join(f\"{int(i):02x}\" for i in ipv4_address.split(\".\")), 16)","sourceCodeStart":12,"sourceCodeEnd":48,"githubUrl":"https://github.com/TheAlgorithms/Python/blob/f5988cc09713315817df6a7e327e258013a94440/conversions/ipv4_conversion.py#L12-L48","documentation":"Raised by ipv4_to_decimal(ipv4_address) in conversions/ipv4_conversion.py:30 when splitting the address on '.' does not yield exactly 4 octets. The function is strict about dotted-quad shape: too few parts ('10.0.255'), too many ('10.0.0.1.5'), or a missing/wrong separator all produce ValueError('Invalid IPv4 address format'). Note each part must also parse with int(), so non-numeric parts raise int's own ValueError first.","triggerScenarios":"ipv4_to_decimal('10.0.255'), ipv4_to_decimal('10.0.0.1.5'), ipv4_to_decimal('192.168.0.1/24') (CIDR suffix becomes a 5th part), or addresses built by joining the wrong list length.","commonSituations":"Passing CIDR notation or addresses with port ('1.2.3.4:80'); constructing IPs from split() output without rechecking part count; trailing dots; IPv6 strings reaching an IPv4-only function.","solutions":["Strip CIDR/port decorations first: ipv4 = addr.split('/')[0].rsplit(':', 1)[0]","Validate shape before calling: len(addr.split('.')) == 4 and each part is decimal 0-255 (or use ipaddress.IPv4Address)","Route IPv6 through ipaddress.IPv6Address instead of this function"],"exampleFix":"# before\nipv4_to_decimal('192.168.0.1/24')  # ValueError\n\n# after\nimport ipaddress\nipv4_to_decimal(str(ipaddress.ip_interface('192.168.0.1/24').ip))","handlingStrategy":"validation","validationCode":"import ipaddress\ntry:\n    ipaddress.IPv4Address(ipv4_address)\nexcept ipaddress.AddressValueError as e:\n    raise ValueError(f'not a plain IPv4 address: {ipv4_address!r}') from e","typeGuard":null,"tryCatchPattern":"try:\n    ipv4_to_decimal(ipv4_address)\nexcept ValueError as e:\n    raise ValueError(f'bad address {ipv4_address!r}: {e}') from e","preventionTips":["Split CIDR (addr/mask) and host:port before conversion","Prefer ipaddress.IPv4Address as the canonical validator","When building addresses by join('.'), assert len(parts) == 4"],"tags":["python","value-error","ipv4","network","input-validation"],"backgroundTag":null,"analyzedSha":"f5988cc09713315817df6a7e327e258013a94440","analyzedAt":"2026-08-14T17:30:07.041Z","schemaVersion":2},"datasetVersion":"2026-08-15T17:31:12.345Z"}