Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

problemas para ignorar erro

Estou tentando aplicar uma lógica que faça o segundo ValuError e não estou conseguido, segue o código:

# Filtros

try:
    treinador = [df["treinador"].unique()]
    treinador_default = treinador[0]

    filtro_treinadores = st.sidebar.multiselect('Treinador', df['treinador'].unique(), max_selections=1)
    if filtro_treinadores:
        df = df[df['treinador'].isin(filtro_treinadores)]
    else:
        raise ValueError("Selecione um treinador.")

    alunos = [df["aluno"].unique()]
    aluno_default = alunos[0]

    filtro_alunos = st.sidebar.multiselect('Aluno', df['aluno'].unique(), max_selections=1)
    if filtro_alunos:
        df = df[df['aluno'].isin(filtro_alunos)]
        # Suponha que df_anamnese e df_avaliacao_fisica também precisam ser filtrados
        df_anamnese = df_anamnese[df_anamnese['aluno'].isin(filtro_alunos)]
        df_avaliacao_fisica = df_avaliacao_fisica[df_avaliacao_fisica['aluno'].isin(filtro_alunos)]
    else:
        raise ValueError("Selecione um aluno.")

except ValueError as ve:
    # Exibir a mensagem de erro do primeiro ValueError e continuar em caso de segundo ValueError
    st.error(str(ve))
except Exception as e:
    if isinstance(e, ValueError):
        # Ignorar outros ValueErrors
        pass
    else:
        # Lidar com outros tipos de exceção
        pass

após selecionado o treinador e o aluno, não segundo ValueError, por isso não sentido que eu trate nas funções.

1 resposta
solução!

Oii, Murilo! Tudo bem?

Você está no caminho certo! O que ocorre é que, quando uma exceção é gerada, o Python interrompe o bloco try para passar o bloco except. O que resulta na captura das exceções do tipo ValueError que está dentro do bloco try.

Como sugestão, primeiramente, é preciso definir e importar os dataframes df_anamnese e df_avaliacao_fisica.

Além disso, você pode adicionar um bloco else para lidar com as exceções ou adicionar um bloco finally para realizar ações adicionais, se sentir que é preciso.

Veja abaixo, um exemplo de código:

try:
    treinador_default = df["treinador"].unique()

    filtro_treinadores = st.sidebar.multiselect('Treinador', df['treinador'].unique(), max_selections=1)
    if filtro_treinadores:
        df = df[df['treinador'].isin(filtro_treinadores)]
    else:
        raise ValueError("Selecione um treinador.")

    aluno_default = df["aluno"].unique()

    filtro_alunos = st.sidebar.multiselect('Aluno', df['aluno'].unique(), max_selections=1)
    if filtro_alunos:
        df = df[df['aluno'].isin(filtro_alunos)]
        # Suponha que df_anamnese e df_avaliacao_fisica também precisam ser filtrados
        df_anamnese = df_anamnese[df_anamnese['aluno'].isin(filtro_alunos)]
        df_avaliacao_fisica = df_avaliacao_fisica[df_avaliacao_fisica['aluno'].isin(filtro_alunos)]
    else:
        raise ValueError("Selecione um aluno.")

except ValueError as ve:
    # Exibir a mensagem de erro do ValueError e continuar em caso de outro tipo de exceção
    st.error(str(ve))
except Exception as e:
    # Lidar com outras exceções e  incrementar no que for necessário

Fique à vontade para adaptar o exemplo acima ao seu código e realizar os testes. E caso queira aprofundar os seus conhecimentos em no tema, recomendo a leitura da documentação do Python que fala de Erros e exceções. Espero que goste!

Continue se dedicando aos estudos e qualquer dúvida, compartilhe no fórum.

Espero ter ajudado e bons estudos!