I am comparing key elements in a list with dictionary keys
event_test = { "EventType": "ShipmentDueDate", "Endpoint": "https://example.net" } events_list = ['EventType','Endpoint'] body = "https"
I wrote a custom function as follows
def validate_input(event_keys,body): count = 0 for list_item in events_list: if list_item in event_keys: count+= 1 if count != len(events_list): print("One/All of: 'EventType','Endpoint' parameters are missing.") if not "https" in body: print("Only https endpoints are accepted") return bool
I want to execute the other part of my code, only if the function executes without any errors. I dont understand how to specify a return value for the function and execute my code based on the return value
I am trying this : calling my function first
validate_response = validate_input(list(event_test.keys()),body) if validate_response == False: print("error in your input") try: print("execute my rest of the code")
Is this the right way to do?
Advertisement
Answer
First things first, I see a couple of issues
1. There is an issue with your eval condition (you are missing an else
)
if validate_response == False: print("error in your input") else: print("execute my rest of the code")
2. Your function is not returning True
or False
AND the not in
operator isn’t used correctly when checking for ‘https’
def validate_input(event_keys,body): count = 0 for list_item in events_list: if list_item in event_keys: count+= 1 if count != len(events_list): print("One/All of: 'EventType','Endpoint' parameters are missing.") return False if "https" not in body: print("Only https endpoints are accepted") return False return True
Moving on…
I am a bit unclear as to what you’re referring to as the “right way”
I’ll take a stab at it and assume you are referring to reducing the complexity and/or lines of code in your sample…
You may try to use the following “optimizations”
Changing your function to use list comprehensions
NOTE: I did change the name of the “body” function param to “body_str” as it shadowed the body variable from the outer scope. Please avoid this as a rule of thumb
def validate_input(event_keys, body_str): count = len([x for x in events_list if x in event_keys]) # print count to debug print(f"Count is {count}") if count != len(events_list): print("One/All of: 'EventType','Endpoint' parameters are missing.") return False if "https" not in body_str: print("Only https endpoints are accepted") return False return True
The following line essentially returns a new list of elements that match your if condition, it then uses the len operation to count the number of elements that matched the said condition
count = len([x for x in events_list if x in event_keys])
Changing your evaluation
One possibility (I would personally use this)
if not validate_response: print("error in your input") else: print("execute my rest of the code")
Another possibility is to get rid of temporary variable assignment altogether – reduces readability though
# validate_response = validate_input(list(event_test.keys()),body) if not validate_input(list(event_test.keys()), body_str): print("error in your input") else: print("execute my rest of the code")