UnboundLocalError: local variable 'user' referenced before assignment só usuarios do tipo gerente podem cadastrar

class FuncionarioCreate(GroupRequiredMixin, LoginRequiredMixin, CreateView):
    # defini qual o modelo pra classe
    group_required = u"gerente"
    model = Funcionario
    template_name = "adocao/formulario.html"

    # Pra onde redirecionar o usuario  depois de inserir
    success_url = reverse_lazy("listar-funcionarios")
    # quais campos vai aparecer no formulario
    fields = ['nome', 'cpf', 'cargo', 'cidade',
              'data_contratacao', 'salario', 'email', 'usuario', 'senha', 'observacao']
# metodo ultilizado para enviar dados ao template

    def get_context_data(self, *args, **kwargs):
        context = super(FuncionarioCreate, self).get_context_data(
            *args, **kwargs)

        # adiciona coisas ao contextos das coisas
        context['titulo'] = "Cadastro de novos funcionarios"
        context['botao'] = "Cadastrar"
        context['classbotao'] = "btn-success"
        return context

    def form_valid(self, form):

        # Recebe os dados do formulário
        senha = form.cleaned_data['senha']
        email = form.cleaned_data['email']
        usuario = form.cleaned_data['usuario']
        cargo = form.cleaned_data['cargo']

        # Tenta criar um usuário
        try:
            user = User.objects.create_user(usuario, email, senha)
            # Adicionar o usuário no grupo
            if (cargo == "VENDEDOR"):
                grupo = Group.objects.get(name='VENDEDOR')
                user.groups.add(grupo)
                user.save()
            # Ou fazer ele um admin/superuser
            elif (cargo == "GERENTE"):
                grupo = Group.objects.get(name='GERENTE')
                user.groups.add(grupo)
                user.is_superuser = True
                user.save()
        except:
            # try
            user.delete()
            # except:
            #     pass
            form.add_error(
                None, 'Erro ao tentar cadastrar esse funcionário como usuário.')
            return self.form_invalid(form)

        # "ligar" o usuário criado com o funcionário que vai ser cadastrado
        form.instance.user = user
        # Se tudo ocorreu bem, finaliza
        return super(FuncionarioCreate, self).form_valid(form)

O problema está nessa linha, quando falha, a instância user não existe. Você precisa se antecipar e previnir isso.