Have function reject bad argument when argument is called by another function? - Printable Version +- Python Forum (https://python-forum.io) +-- Forum: Python Coding (https://python-forum.io/forum-7.html) +--- Forum: General Coding Help (https://python-forum.io/forum-8.html) +--- Thread: Have function reject bad argument when argument is called by another function? (/thread-11650.html) |
Have function reject bad argument when argument is called by another function? - jobroinc - Jul-19-2018 I am creating a functions that calls upon two other functions: hal(a) and acc(b). x = {"F": "Fluorine", "Cl": "Chlorine"} y = {"O": "Oxygen"} def hal(a): for halogens in x: if halogens == a: print(x[a]) return(x[a]) def acc(b): for acceptors in y: if acceptors == b: print(y[b]) return y[b] def is_halogen_bond(a, b): hal(a) acc(b) is_halogen_bond("F", "O")I want the functions hal(a) and acc(b) to prompt for halogen and acceptor if a and b in is_halogen_bond(a,b) are not apart of the lists x and y. I am really struggling here ! Any help would be appreciated! THANK YOU! RE: Have function reject bad argument when argument is called by another function? - gontajones - Jul-19-2018 I'm not sure if I understood what you want, but if you want to check for a key in a dict, you can do this: x = {"F": "Fluorine", "Cl": "Chlorine"} y = {"O": "Oxygen"} def check_key(d, key): if key in d: print(d[key]) return True return False def is_halogen_bond(a, b): return check_key(x, a) and check_key(y, b) print(is_halogen_bond("F", "O")) RE: Have function reject bad argument when argument is called by another function? - jobroinc - Jul-19-2018 Thank you I will take a look. I will clarify what I meant if this does not solve the issue. x = {"F": "Fluorine", "Cl": "Chlorine"} y = {"O": "Oxygen"} def hal(a): for halogens in x: if halogens == a: print(x[a]) return(x[a]) def acc(b): for acceptors in y: if acceptors == b: print(y[b]) return y[b] def is_halogen_bond(halogen, acceptor ): hal(a) acc(b) is_halogen_bond("F", "O")On the code that I have I want is is_halogen_bond("F", "O")to print Fluorine and Oxygen, which it does. I get a "KeyError" every time that "halogen" or "acceptor" is put inside of the arguments. Perhaps my failed code would be a better way to illustrate what I am speaking of . . . To resolve this issue I attempted a while loop and all loops under the sun and I failed. What I want my code to do from this point is then print something like this if the halogen argument produces a key error: print("Error, not a halogen.")and then prompt the user to enter a halogen that is in the list x. I want the same to apply for acceptors with the list y. I know loops are involved in here but I am struggling to create one correctly. Thanks for your time! Sorry, I made a mistake... I meant " I get a "KeyError" every time a "halogen" or "acceptor" is put inside of the arguments that is not listed in x or y. Perhaps my failed code would be a better way to illustrate what I am speaking of . . ." KeyError, Input loop - jobroinc - Jul-19-2018 I am supposed to make a program for my internship that identifies halogen bonds but I have been having trouble. Here is the code: x = {"F": "Fluorine", "Cl": "Chlorine"} y = {"O": "Oxygen"} def hal(a, key): if key in a: print(x[key]) return x[key] def acc(b, key): if key in b: print(y[key]) return y[key] def is_halogen_bond(halogen, acceptor): hal(x, halogen) acc(y, acceptor) is_halogen_bond("Br", "O")My code is below and it is not complete but I have been trying to get past a key error that is generated when I put in "Br" for halogen on line 22. I know that it will generate a key error and that was my point. Here is the error: To resolve this, I want to be able to create a loop that will prompt the user to enter a key that is in the dictionary x until a key from the dictionary x is entered. Then I want it to print the value for that key. I do not know what steps I should take.I am really new to programming and any support is greatly appreciated. PS: If the function arguments are "F" and "O", the code does what I want. I want it to be able to handle exceptions. RE: KeyError, Input loop - gontajones - Jul-19-2018 Please, use the same thread for same issues. Check this implementation: x = {"F": "Fluorine", "Cl": "Chlorine"} y = {"O": "Oxygen"} def hal(target_dict, key): try: # This will raise KeyError if not found print(target_dict[key]) except KeyError: print(f'{key}: KeyError') def acc(target_dict, key): try: # This will raise KeyError if not found print(target_dict[key]) except KeyError: print(f'{key}: KeyError') def is_halogen_bond(halogen, acceptor): hal(x, halogen) acc(y, acceptor) user_key1 = input('Enter key 1: ') user_key2 = input('Enter key 2: ') while user_key1 != 'exit' and user_key2 != 'exit': is_halogen_bond(user_key1, user_key2) user_key1 = input('Enter key 1: ') user_key2 = input('Enter key 2: ') RE: Have function reject bad argument when argument is called by another function? - jobroinc - Jul-21-2018 Thank you for your help! And I will remember that for future reference. |