2017-08-25 6 views
0

Ich bin Neuling in Python und immer der FehlerET.find() nimmt genau 2 Argument (3 gegeben)

ET.find() nimmt genau 2 Argument (3 angegeben)

während der Ausführung von

import xml.etree.ElementTree as ET 

ns = {'conv_svc': 'http://schemas.com/serviceconvert'}    
jobTypesXml = self.__server_request(url, None)  
root = ET.fromstring(jobTypesXml)  
for job in root.find('conv_svc:GetJobTypesResult', ns): 

Meine erste Frage ist: welche Art in der folgenden Initialisierung geschlossen wird?

Ich kann weiter gehen, um den Fehler selbst herauszufinden! Vielen Dank im Voraus!

Antwort

2

Die find() Methode only takes a single argument so können Sie nicht tun, was auch immer Sie versuchen (zumindest nicht mit find()).

Um Ihre Frage zu beantworten, ist {'conv_svc': 'http://schemas.com/serviceconvert'} ein Wörterbuch und würde als ein einzelnes Argument interpretiert werden. Wenn Sie sich fragen, warum der Fehler besagt, dass Sie 3 Argumente übergeben (was Sie nicht sind), liegt das daran, dass self auch als Argument für Klassenmethoden gezählt wird.

class Testing(object): 

    def __init__(self): 
     self.a = 2 

    def do_something(self, b): 
     self.a += b 

obj = Testing() 
obj.do_something(2, 3) # Clearly passing only 2 arguments 

Gibt:

TypeError: do_something() takes exactly 2 arguments (3 given) 

EDIT

Dank @ShreyashSSarnayak für den Hinweis auf, dass find()an optional extra argument in Python 3 nehmen. Die Fehlermeldung bestätigt, dass Sie Python 2 verwenden, aber vielleicht lesen Sie einige Dokumentation zu Python 3.

+1

In python3 dauert es [zwei Argumente] (https://docs.python.org/3/library/xml.etree .elementtree.html # xml.etree.ElementTree.Element.find) –

+0

@ShreyashSSarnayak Aha, so ist der Fehler, dass sie Python 2 verwenden und Python 3 Dokumentation verwenden (der Fehler in der Frage zeigt, dass sie nicht bestehen können das optionale Argument). Ich werde bearbeiten, danke. – roganjosh

Verwandte Themen