Ir para o conteúdo

 Voltar a invesalius-l...
Tela cheia

Exceção na biblioteca math

2 de Agosto de 2008, 17:54 , por Desconhecido - | Ninguém seguindo este artigo por enquanto.
Visualizado 13 vezes

De acordo com a documentação do python não se pode usar exceção na biblioteca math.

" The math module consists mostly of thin wrappers around the platform C math library functions. Behavior in exceptional cases is loosely specified by the C standards, and Python inherits much of its math-function error-reporting behavior from the platform C implementation. As a result, the specific exceptions raised in error cases (and even whether some arguments are considered to be exceptional at all) are not defined in any useful cross-platform or cross-release way. "

analisando o código, notei que no arquivo ivImageEditor é feito tratamento de exceção:

  try:
                x = int(sqrt(r2 - y * y))
  except ValueError:

Nas linhas 1642,2041 e 2178.

Uma maneira portável seria remover o "ValueError" deixando o tratamento da exceção "generico". Isso pode causar outros problemas.

Outra maneira seria verificar os valores de r2 e y de forma a analisar ser isso iria causar ou não essa exceção, mas pra isso teria que ter um entendimento matemático exato do pq essa exceção é causada (o que eu pessoalmente desconheço)

 

Alguma ideia de como eu resolveria essa situação?

Autor: Thomaz dos Reis


1Um comentário

  • 48dfb8d5a4a0459d4285c752af22e7cb?only path=false&size=50&d=404Tatiana Al-Chueyr Pereira Martins(usuário não autenticado)
    8 de Agosto de 2008, 0:27

     

    Thomaz,

    JAMAIS DEIXE UMA EXCEÇÃO GENÉRICA!!! Isso dificulta muito na hora de debugar o código... Pois isso pode mascarar outros erros - ex: memória, outras funções com problema, etc, etc.

    No InVesalius há este tipo de tratamento em alguns pontos (exceção genérica), mas abolimos esta prática e estamos aos poucos "limpando" o código.

    Caso uma área do código possa tratar múltiplas exceções, utilize algo do tipo:

     try:
        f = open('file.txt')
        s = f.readline()
        i = int(s.strip())
    except IOError, (errno, strerror):
       print "Error IO # (%s): %s" % (errno, strerror)
    except ValueError:
       print "Could not convert data to an integer"

    Abraços,

    Tati