Jerry Cohen
Jerry Cohen

Reputation: 133

missing 1 required positional argument (IP checker)

This is an IP address problem where I need to implement a function is_valid_IP that takes an arbitrary string and determines if it represents a valid IPv4 or IPv6 address.

IPv4_STRING = "127.0.0.1"
IPv4_INVALID_STRING = "300.0.0.1"
IPv6_STRING = "2001:0db8:85a3:0000:0000:8a2e:0370:7334"
IPv6_INVALID_STRING = "2001:0db8:85a3:0000:0000:8a2e:0370:7334:7334"
INVALID_IP_STRING = "Some arbitrary string"

def is_valid_IPv4_octet(octet: str):
    for element in ip_list:
        if int(element) < 0 or int(element) > 255 :
            return False
    return True

def is_valid_IPv4(ip: str):
    if ip.count('.') != 3:
        return False
        quit()
    ip_list = list(map(str, ip.split('.')))
    return is_valid_IPv4_octet(ip_list)


def is_valid_IPv6_hextet(hextet: str):
    for element in ip_list:
        if int(element,16) < 0 or int(element,16)>65535 :
            return False
    return True

def is_valid_IPv6(ip: str):
    if ip.count(':')!=7:
        return False
        quit()
    ip_list=list(map(str,ip.split(':')))
    return is_valid_IPv6_hextet(ip_list)

def is_valid_IP(ip: str):
   if( is_valid_IPv4() or is_valid_IPv6() == True):
       print("Valid IP Address")
   else:
       print("Invalid IP Address")



print(
    f"{IPv4_STRING} is a valid IP Address:",
    is_valid_IP(IPv4_STRING))
print(
    f"{IPv4_INVALID_STRING} is a valid IP Address:",
    is_valid_IP(IPv4_INVALID_STRING),
)
print(
    f"{IPv6_STRING} is a valid IP Address:",
    is_valid_IP(IPv6_STRING))
print(
    f"{IPv6_INVALID_STRING} is a valid IP Address:",
    is_valid_IP(IPv6_INVALID_STRING),
)
print(
    f"{INVALID_IP_STRING} is a valid IP Address:",
    is_valid_IP(INVALID_IP_STRING),
)

The IDE gives me

Traceback (most recent call last):
  File "C:\Users\jerry\PycharmProjects\pythonProject1\main.py", line 43, in <module>
    is_valid_IP(ip)
  File "C:\Users\jerry\PycharmProjects\pythonProject1\main.py", line 38, in is_valid_IP
    if( is_valid_IPv4() or is_valid_IPv6() == True):
TypeError: is_valid_IPv4() missing 1 required positional argument: 'ip'

Can someone tell me why? I've been surfing a bit, the general opinion is i need to put something in the bracket of the function. But in this case there is somehting inside...So i dont really know where went wrong.

Upvotes: 0

Views: 89

Answers (2)

Mojtaba
Mojtaba

Reputation: 593

def is_valid_IP(ip: str):
   if( is_valid_IPv4() or is_valid_IPv6() == True):
       print("Valid IP Address")
   else:
       print("Invalid IP Address")

here you are calling 2 functions is_valid_IPv4 and is_valid_IPv6. These 2 need an input which is ip.

Upvotes: 1

Isaac Rene
Isaac Rene

Reputation: 396

You are missing the arguments here:

def is_valid_IP(ip: str):
#added ip
  if( is_valid_IPv4(ip) or is_valid_IPv6(ip) == True):
      print("Valid IP Address")
  else:
      print("Invalid IP Address")

Also since the functions already return True or False you can get rid of the == True

def is_valid_IP(ip: str):
  if( is_valid_IPv4(ip) or is_valid_IPv6(ip)):
      print("Valid IP Address")
  else:
      print("Invalid IP Address")

Upvotes: 3

Related Questions