maybe replace the custom exceptions with returns of some sort of return value to get rid of the try catch around query_weapon()?