Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Como escrever este código de uma maneira melhor.

Olá pessoal, me veio um dúvida em relação ao código abaixo:

Estou fazendo uma automação com Selenium, na qual ele tenta achar uma informação de um status específico em uma pagina web pela xpath, porém dependendo do estado deste status, ele fica em um xpath diferente. Quando faço a procura deste xpath, o selenium acusa o erro de xpath inexistente, como este status possue 3 xpath diferentes dependendo do estado, eu resolvi fazer algo como o código abaixo:

try:
    x = 1 / 0 # Exemplo de xpath inexistente, que seria acusado um erro.
    print(x)
except:
    try:
        x = 2 / 0 # Aqui ele tenta acessar a segunda xpath que tbm é inexistente.
        print(x)
    except:
        x = 2 / 1 # Aqui ele procura pela terceira (e ultima) xpath que estaria correta neste caso.
        print(x)

Este código funciona, porém sinto que teria maneiras muito melhores de resolver, e provavelmente não deve ser uma boa prática desta maneira. Será que não é uma boa ideia utilizar o xpath neste caso com o Selenium?

Não sei se ficou confuso a minha dúvida.

Sou iniciante no Python, estou fazendo essa automação para facilitar a minha vida no trabalho e aproveitar para treinar Python. Posso passar o código completo, porém vocês não conseguiriam testa-lo, pois ele acessa o sistema da empresa. Não conseguiria logar.

2 respostas
solução!

Olá Nathan, não entendi muito bem se você só deseja tratar essas exceções para que o programa não pare e se você tem certeza que uma das 3 tentativas dará certo. De qualquer forma deixo o código abaixo:

x = 0.0
try:
    x = 1 / 0  # Exemplo de xpath inexistente, que seria acusado um erro.
except Exception as e:
    print('Error 1', e)

try:
    x = 2 / 0  # Aqui ele tenta acessar a segunda xpath que tbm é inexistente.
except Exception as e:
    print('Error 2', e)

try:
    x = 2 / 1  # Aqui ele procura pela terceira (e ultima) xpath que estaria correta neste caso.
except Exception as e:
    print('Error 3', e)

print(x) if x else print('Nada deu certo')

Era algo assim mesmo, ter certeza se ele que se uma não der certo, ele tente a próxima. De uma maneira que o código fique visualmente fácil de entender caso outra pessoa veja ou eu volte a mexe-lo depois de muito tempo. O código que dei como exemplo, o pycharm acusava ele de estar fora do padrão da PEP 8, e eu estava tentando entender um pouco melhor em como resolver.

Muito obrigado.