Python: Código de depuração (debug)

Palavras-chave: debug, depuração, otimização

Quando estamos desenvolvendo um programa é muito comum ter que colocar código de depuração nele para facilitar nosso trabalho. Ao mesmo tempo esse tipo de código não deveria ser executado nas mãos de nossos clientes.

Alguns programadores resolvem esse problema à sua maneira e acabam perdendo tempo para fazer isso. Em Python não é preciso criar esses mecanismos porque a linguagem já oferece duas ferramentas para lidar com isso: o comando assert e a variável __debug__. Vamos ver como usá-los:

def soma(valor):
   assert valor > 0, "Valor negativo!"
   soma = 0
   for i in range(valor):
      if __debug__:
         print 'DEBUG: O valor de i:', i
      soma += i
   return soma

print soma(2)
print soma(-1)

Ao executar esse código teremos:

$ python x.py
DEBUG: O valor de i: 0
DEBUG: O valor de i: 1
2
Traceback (most recent call last):
  File "x.py", line 11, in ?
    print soma(-1)
  File "x.py", line 2, in soma
    assert valor > 0, "Valor negativo!"
AssertionError: Valor negativo!

Mas se executamos o mesmo programa com a opção de otimização (-O) do Python o compilador irá remover todos os comandos assert e todo o código que estiver dentro de um “if __debug__“. Como esse código é removido pelo compilador ele sequer será executado pelo interpretador. Veja:

$ python -O x.py
1
0
This entry was posted in Python. Bookmark the permalink.