Refatora ali na linha 23 do código principal
def funcao_principal():
# código da linha 23 em diante...
E coloca um loop while com break na função principal. Ficaria algo como:
while True:
try:
funcao_principal()
break # se tudo correr bem, saia do loop
except UsuarioNaoEncontrado: # ou qualquer exceção que você queira tratar
# trate o erro aqui, se necessário
pass # continue o loop, retornando ao início da funcao_principal
Por fim, lança uma exceção no conexão4.py: No arquivo conexão4.py, quando o usuário não for encontrado (ou qualquer outra condição que você deseja tratar). Você pode definir a exceção no início do seu arquivo ou em um módulo separado, assim:
class UsuarioNaoEncontrado(Exception):
pass
# ... mais tarde no código ...
if not usuario_encontrado: # ou qualquer condição que você esteja verificando
raise UsuarioNaoEncontrado("O usuário não foi encontrado.")
O que isso faz é interromper a execução no ponto em que a exceção é lançada e retornar ao bloco except mais próximo que pode tratá-la. No nosso caso, isso está no loop while em principal.py, fazendo o programa voltar ao início da função funcao_principal().