Em outra pergunta , a resposta aceita sugeria substituir uma instrução if (muito barata) no código Python por um bloco try / except para melhorar o desempenho.
Deixando de lado as questões de estilo de codificação, e supondo que a exceção nunca seja disparada, quanta diferença faz (em termos de desempenho) ter um manipulador de exceções em comparação a não ter um, em comparação a ter uma instrução if comparável a zero?
Respostas:
Por que você não mede usando o
timeit
módulo ? Dessa forma, você pode ver se é relevante para seu aplicativo.OK, acabei de tentar o seguinte:
Resultado:
Portanto, como esperado, não ter nenhum manipulador de exceção é um pouco mais rápido (mas explode na sua cara quando a exceção acontece) e
try/except
é mais rápido do que um explícitoif
, desde que a condição não seja atendida.Mas está tudo dentro da mesma ordem de magnitude e improvável que importe de qualquer maneira. Somente se a condição for realmente atendida, a
if
versão será significativamente mais rápida.fonte
try/except
é mais rápido do queif a != 0
Esta pergunta é realmente respondida nas Perguntas frequentes sobre design e história :
fonte
Esta pergunta é enganosa. Se você assumir que a exceção nunca é disparada, nenhum deles é o código ideal.
Se você presumir que a exceção é disparada como parte de uma condição de erro, você já está fora do reino de querer o código ideal (e provavelmente não está lidando com isso em um nível refinado como aquele).
Se você estiver usando a exceção como parte do fluxo de controle padrão - que é a forma pitônica "peça perdão, não permissão" - então a exceção será acionada e o custo depende do tipo de exceção, o tipo de se e em que porcentagem de tempo você estima que a exceção aconteça.
fonte