Дело в этом коде:
data = result.split()
fun_name = data[0]
arg = data[1:]
bank_fun[fun_name](arg)
Вы разбиваете введённую строку по пробельным символам (в т.ч. табы и переводы строки), но не проверяете ни есть ли функция с таким именем, ни правильное ли количество параметров передано, ни правильно ли записаны числа. Т.е. если у вас более трёх пробельных частей в строке, то в arg попадёт более двух значений, а не все функции это позволяют.
Кратковременное решение: добавьте отлов исключений и проверку корректности вводимого текста.
Более долгое но правильное решение: не изобретайте велосипед, а освойте модуль
argparse, чтобы удобно разбирать команды и контролировать их корректность. А для удобного разбора строки (в том числе фишек типа "завернуть строку с пробелами в кавычки чтобы считалась как один аргумент") используйте модуль
shlex. Оба модуля в стандартной поставке питона.