TypeError: oggetto non è invocabile

Ho alcune funzioni che elaborano il parametro, come :

def createDataModel(objectModel):
    ......
def createLayoutModel(objectModel):
    ......
def createWidgetModel(objectModel):
    ......

Ho un po ‘ di xml come file di input, con una specifica radice del nome del tag, come ( dataModel, layout di pagina) poi io li converte in un oggetto del modello. Ho una mappa che determina la funzione che deve elaborare il modello di oggetto

xsdPathsMap = {
    "dataModel": createDataModelFromXml,
    "layout": createLayoutModel,
    "page": createWidgetModelFromXml
}

Poi ho creato modelli di oggetti da xml e assegnare loro la funzione che deve elaborare loro,

result = xsdPathsMap[xmlRootName]
# a is objectified xml
a.modelerFunction = result

quando voglio passare l’oggetto del suo metodo di chiusura ho avuto questa eccezione:

a.modelerFunction(a)

TypeError: object is not callable    

qual è il problema?

e questo è il mio Traceback :

Traceback (most recent call last):
  File "model/xmlTranporter.py", line 204, in <module>
    a = main("main/schema")
  File "model/xmlTranporter.py", line 200, in main
    a(obj)
TypeError: 'lxml.objectify.StringElement' object is not callable
  • Si non stanno mostrando il codice sufficiente per diagnosticare il problema.
  • Ho aggiunto ulteriori informazioni
  • Sembra che potrebbe funzionare. Puoi mostrare il completo traceback hai ottenuto con l’eccezione?
  • type(result).
  • ned sguardo, di nuovo, a una domanda con un sacco di meno
InformationsquelleAutor Pooya | 2012-07-21



2 Replies
  1. 2

    Non so perché stai facendo questo esercizio:

    result = xsdPathsMap[xmlRootName]
    a.modelerFunction = result # this is just kind of weird

    Aggiungere il modeler funzioni per la classe di a e lo chiamano semplicemente come un metodo:

    a.createModel()

    O semplicemente passare una per la modellazione funzione:

    result(a)

    Tuttavia, questo si presuppone che le funzioni di modellazione che si recuperano dalla mappa sono, infatti, le funzioni e non classi.

    Se si desidera definire classi che sono richiamabili che ovviamente è bene, ma è necessario definire il __call__ metodo di protocollo:

    class MyModelingFunction(object):
        ...
    
        def __call__(self, *args, **kwargs):
            """do something when I'm called"""
    • Devo scrivere il mio codice come questo
    • Perché ho dovuto preparare tutti gli oggetti, poi, passare gli uni e gli altri e li ordina in base alla loro priorità
  2. 2

    Il messaggio di errore si ottiene significa che in a.modelerFunction(a), se pensi di avere una funzione, ma non. a.modelerFunction è un oggetto definito dall’utente, non una funzione. Se si posta più di codice, possiamo capire perché.

Lascia un commento