3.4 טיפול בשגיאות פתרון

def main() -> None:  
    welcome()  
    start_calculator()  
    print("bye!")  


def welcome() -> None:  
    """  
    welcoming the user   """    welcome_message = "Amit calculator! \n" \  
                      "syntax: > number operation number \n" \  
                      "example: 1 + 3 \n" \  
                      "avilable operations: +,-,*,/ \n" \  
                      "enter /q for exit the program!"  
    print(welcome_message)  


def start_calculator() -> None:  
    while True:  
        first_number, operation, second_number = handle_input()  
        if operation == "quit":  
            return  
        result = handle_calculate(first_number, operation, second_number)  
        print(f"res: {result}")  


def handle_input() -> (int, str, int):  
    while True:  
        command = input("> ")  
        if command == "/q":  
            return 0, "quit", 0  
        try:  
            first_number, operation, second_number = command.split(" ")  
            first_number, second_number = int(first_number), int(second_number)  
            return first_number, operation, second_number  
        except Exception:  
            print("Please enter valid expression!")  


def handle_calculate(first_number: int, operation: str, second_number: int) -> int:  
    try:  
        result = calculate(first_number, operation, second_number)  
    except ZeroDivisionError:  
        print("Can't divide by zero! ")  
        result = 0  
    except KeyError:  
        print(f"Operation {operation} doesn't exist!")  
        result = 0  
    finally:  
        return result  


def calculate(first_number: int, operation: str, second_number: int) -> int:  
    """  
    calculate result by given 2 integers and operation -> can be only +,-,*,/    """    actions = {  
        "+": add,  
        "-": sub,  
        "*": mul,  
        "/": div  
    }  
    function = actions[operation]  
    result = function(first_number, second_number)  
    return result  


def add(first_number: int, second_number: int) -> int:  
    """  
    Adding 2 given parametrs and return    """    return first_number + second_number  


def sub(first_number: int, second_number: int) -> int:  
    """  
    Subtracting 2 given parameters and return   """    return first_number - second_number  


def mul(first_number: int, second_number: int) -> int:  
    """  
    Multiplying 2 given parameters and return    """    return first_number * second_number  


def div(first_number: int, second_number: int) -> float:  
    """  
    Dividing 2 given parameters and return    """    return first_number / second_number  


if __name__ == "__main__":  
    main()