TypeError: 'module' object is not callable

Le
Eric Masson
'Lut,

Je suis entrain de jouer avec les packages, mais je rencontre l'erreur
mentionnée dans le sujet.

Soit une structure de fs comme la suivante :
xmlutils/
__init__.py
normalize.py
parsefile.py

Le contenu des fichiers est le suivant :
__init__.py
__version__ = '0.0.1'

__all__ = [
'normalize'
]

normalize.py
import sys
from xml import sax
from xml.sax.saxutils import XMLFilterBase

class normalize(XMLFilterBase):
"""
SAX filter to ensure that contiguous white space nodes are
delivered merged into a single node
"""

def __init__(self, upstream, downstream):
XMLFilterBase.__init__(self, upstream)
self._downstream = downstream
self._accumulator = []
return

def _complete_text_node(self):
if self._accumulator:
self._downstream.characters(''.join(self._accumulator))
self._accumulator = []
return

def startElement(self, name, attrs):
self._complete_text_node()
self._downstream.startElement(name, attrs)
return

def startElementNS(self, name, qname, attrs):
self._complete_text_node()
self._downstream.startElementNS(name, qname, attrs)
return

def endElement(self, name):
self._complete_text_node()
self._downstream.endElement(name)
return

def endElementNS(self, name, qname):
self._complete_text_node()
self._downstream.endElementNS(name, qname)
return

def processingInstruction(self, target, body):
self._complete_text_node()
self._downstream.processingInstruction(target, body)
return

def comment(self, body):
self._complete_text_node()
self._downstream.comment(body)
return

def characters(self, text):
self._accumulator.append(text)
return

def ignorableWhitespace(self, ws):
self._accumulator.append(text)
return

parsefile.py
import sys
from xml import sax
from xml.sax.saxutils import XMLGenerator
from xmlutils import normalize

if __name__ == "__main__":
parser = sax.make_parser()
#XMLGenerator is a special SAX handler that merely writes
#SAX events back into an XML document
downstream_handler = XMLGenerator()
#upstream, the parser, downstream, the next handler in the chain
filter_handler = normalize(parser, downstream_handler)
#The SAX filter base is designed so that the filter takes
#on much of the interface of the parser itself, including the
#"parse" method
filter_handler.parse(sys.argv[1])

Lorsque je lance parsefile.py, je récupère l'erreur suivante :
> python parseorderfile.py ../fichier.xml
Traceback (most recent call last):
File "parseorderfile.py", line 12, in ?
filter_handler = normalize(parser, downstream_handler)
TypeError: 'module' object is not callable

J'ai cherché dans les docs sur python.org, mais je dois être bouché à
l'émeri, je ne comprend pas pourquoi cela ne fonctionne pas, la présence
du fichier __init__.py dans xmlutils devrait faire en sorte que ce
répertoire soit traité comme un package, non ?

Merci d'avance.

--
Excusez-moi pour ce message perso mais y'a urgence.
Régis X de Chambéry et Thierry Y de Strasbourg sont priés de prendre
contact avec le Bureau de LUCCAS par mail.
-+- In : GNU - Le bonheur c'est simple comme un coup de fil -+-
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Alain BARTHE
Le #681285
'Lut,

Je suis entrain de jouer avec les packages, mais je rencontre l'erreur
mentionnée dans le sujet.

Soit une structure de fs comme la suivante :
xmlutils/
__init__.py
normalize.py
parsefile.py

Le contenu des fichiers est le suivant :
__init__.py
__version__ = '0.0.1'

__all__ = [
'normalize'
]

normalize.py
import sys
from xml import sax
from xml.sax.saxutils import XMLFilterBase

class normalize(XMLFilterBase):
"""
SAX filter to ensure that contiguous white space nodes are
delivered merged into a single node
"""

def __init__(self, upstream, downstream):
XMLFilterBase.__init__(self, upstream)
self._downstream = downstream
self._accumulator = []
return

def _complete_text_node(self):
if self._accumulator:
self._downstream.characters(''.join(self._accumulator))
self._accumulator = []
return

def startElement(self, name, attrs):
self._complete_text_node()
self._downstream.startElement(name, attrs)
return

def startElementNS(self, name, qname, attrs):
self._complete_text_node()
self._downstream.startElementNS(name, qname, attrs)
return

def endElement(self, name):
self._complete_text_node()
self._downstream.endElement(name)
return

def endElementNS(self, name, qname):
self._complete_text_node()
self._downstream.endElementNS(name, qname)
return

def processingInstruction(self, target, body):
self._complete_text_node()
self._downstream.processingInstruction(target, body)
return

def comment(self, body):
self._complete_text_node()
self._downstream.comment(body)
return

def characters(self, text):
self._accumulator.append(text)
return

def ignorableWhitespace(self, ws):
self._accumulator.append(text)
return

parsefile.py
import sys
from xml import sax
from xml.sax.saxutils import XMLGenerator
from xmlutils import normalize

if __name__ == "__main__":
parser = sax.make_parser()
#XMLGenerator is a special SAX handler that merely writes
#SAX events back into an XML document
downstream_handler = XMLGenerator()
#upstream, the parser, downstream, the next handler in the chain
filter_handler = normalize(parser, downstream_handler)
#The SAX filter base is designed so that the filter takes
#on much of the interface of the parser itself, including the
#"parse" method
filter_handler.parse(sys.argv[1])

Lorsque je lance parsefile.py, je récupère l'erreur suivante :
python parseorderfile.py ../fichier.xml
Traceback (most recent call last):

File "parseorderfile.py", line 12, in ?
filter_handler = normalize(parser, downstream_handler)
TypeError: 'module' object is not callable

J'ai cherché dans les docs sur python.org, mais je dois être bouché à
l'émeri, je ne comprend pas pourquoi cela ne fonctionne pas, la présence
du fichier __init__.py dans xmlutils devrait faire en sorte que ce
répertoire soit traité comme un package, non ?

Merci d'avance.



Salut,

C'est quoi ton fichier parseorderfile.py ?

Tu n'en parles pas dans ton exemple, tu parles de parsefile.py

Ton probleme ne vient-il pas simplement de la.


Eric Masson
Le #681284
Alain BARTHE
'Lut,

C'est quoi ton fichier parseorderfile.py ?


Juste une typo, c'est bien parsefile.py

Ton probleme ne vient-il pas simplement de la.


Non.

Merci quand même.

--
DP> http://couic-couic.fr
le lien ne marche pas...
-+- W in:
Alain BARTHE
Le #681283
Alain BARTHE
'Lut,

C'est quoi ton fichier parseorderfile.py ?


Juste une typo, c'est bien parsefile.py

Ton probleme ne vient-il pas simplement de la.


Non.

Merci quand même.

Et normalize.normalize (...,...)

ou
from xmlutils.normalize import normalize


Eric Masson
Le #681282
Alain BARTHE
'Re,

Et normalize.normalize (...,...)
ou
from xmlutils.normalize import normalize


J'étais persuadé d'avoir essayé précédemment, mais il faut croire que
non, vu qu'avec cette modification, ça fonctionne.

Merci.

--
SP : De la différence entre "menacé" et "stevé"....
VN : je prefere largement être menacé que stevé, au moins on peut se
defendre
-+- VN in Guide du Macounet Pervers : Corbeille mon amour -+-

Alain BARTHE
Le #681281
Alain BARTHE
'Re,

Et normalize.normalize (...,...)
ou
from xmlutils.normalize import normalize


J'étais persuadé d'avoir essayé précédemment, mais il faut croire que
non, vu qu'avec cette modification, ça fonctionne.

Merci.

OK.


Tu étais bien en train d'appeler le module normalize et non la classe
normalize du module du même nom.

C'était indiqué par le message d'erreur: "module object is not callable"


Eric Masson
Le #681280
Alain BARTHE
Tu étais bien en train d'appeler le module normalize et non la classe
normalize du module du même nom.

C'était indiqué par le message d'erreur: "module object is not callable"


Avec le recul, c'est en effet logique.

Merci

--
Je n'ai pas posté dans 8 ou 9 NG, mais dans une vingtaine. Ce n'est pas
pour autant un spam. Les différents posts sont pleinement justifiés.
Cela dit, c'est vrai, j'en profite pour faire connaître mon site.
-+- B&F in GNU : Ce n'est pas du spam, c'est juste de la publicité -+-

Publicité
Poster une réponse
Anonyme