почему при инициализации с лямбдой всё норм проходит, а без неё заходит в функцию и там выбивает ошибку?
Не шарю, но connect скорее всего потом вызывает полученный аргумент
Выходит примерно так
def connect(cb):
cb()
connect(lambda: func())
connect(func())
Первое вызовет лямбду, которая вызывает func, а второе вызовет уже то что возвращает func()