sexta-feira, 22 de janeiro de 2010

No Zope - global name 'type' is not defined

Esse erro, normalmente é significa que você não declarou alguma variável, mas quando ele acontece no ZOPE e você está tentando utilizar o método type() dentro de um script python é por um outro motivo.

O método type não está disponível para ser utilizado no ZOPE. Por isso, quando você tenta utilizar este método, o python informa que a variável não foi definida. Naturalmente, você fica com cara de idiota, imaginando o motivo disso.

O motivo é simples e você pode ler em inglês abaixo:

"type" applied to almost any Zope object will not give you "Instance" (as you would expect in a pure Python application) but "ImplicitAcquirer Wrapper" (or something like this)

Isso significa que o zope possui inumeras gambiarras para funcionar e todo tipo acaba sendo encapsulado dentro de alguma coisa.

Uma mente brilhante, entretanto, inventou o seguindo método:

same_type(x,y)

onde x pode ser o seu objeto e y um objeto do typo que você quer testar. Por exemplo: vamos supor que você deseja saber se algo é uma string. Faça assim:

Veja as duas linhas abaixo com muita atenção.

same_type(x," ")  //ISSO SIM É UMA GAMBIARRA

Você pode substituir a string pelo objeto que desejar, uma lista seria [], ou um dicionário: {}.

É isso, espero que ajude.