2016-10-20 3 views
2

meinem ersten Frage SO so hoffe ich, dass ich Zorn nicht die Gruppe ;-)gspread httperror: 400 mit insert_row OR add_row

Mit gspread 0.4.0 und Python 2.7, ich Seiten in meinem Google-Blatt zugreifen kann , kann Daten lesen und den Inhalt von Zellen mit update_cell() ändern. Allerdings versucht, eine Zeile einzufügen oder eine Zeile an das Ende des Blattes sind beide erfüllt mit dem folgenden Fehler anhängen:

File "c:\Python27\lib\site-packages\gspread\models.py", line 525, in append_row 
self.add_rows(1) 
File "c:\Python27\lib\site-packages\gspread\models.py", line 507, in add_rows 
self.resize(rows=self.row_count + rows) 
File "c:\Python27\lib\site-packages\gspread\models.py", line 500, in resize 
self._element = self.client.put_feed(uri, ElementTree.tostring(feed)) 
File "c:\Python27\lib\site-packages\gspread\client.py", line 212, in put_feed 
r = self.session.put(url, data, headers=headers) 
File "c:\Python27\lib\site-packages\gspread\httpsession.py", line 85, in put 
return self.request('PUT', url, data=data, **kwargs) 
File "c:\Python27\lib\site-packages\gspread\httpsession.py", line 72, in request 
response.status_code, response.content)) 
spread.exceptions.HTTPError: 400: The reference to entity "format" must end with the ';' delimiter. 

ich einen Schlag auf den gspread Github Seite gefunden, die diesen Fehler verwiesen und dass Benutzer hatte offenbar Das Problem ist verschwunden, als er Berechtigungen aus seinem Blatt entfernt hat. Ich habe Berechtigungen von mir entfernt, aber der Fehler bleibt bestehen.

Ich bin nicht der versierte Benutzer von HTTP, um Daten zu aktualisieren, und ich denke, das ist, was gspread hier tut, also bin ich ratlos. Es gibt eine Menge """ Sachen hier, die meine Augen bluten lassen.

Dank dem Kollektiv für jede Beratung/Unterstützung!

+1

Könnten Sie bitte ein Beispiel Ihres Codes mit' update_cell() 'call? – Burnash

+0

Hallo Burnash, dieses Schiff ist schon lange gesegelt; Ich weiß nicht, warum ich bis heute Abend keine Nachricht von deiner Anfrage erhalten habe, sonst hätte ich sofort geantwortet! Jedoch habe ich es schließlich zu einem Problem in models.py verfolgt, wo ein unapprapped Ampersand in Zeile 501 übergeben wurde. Ich änderte die lokale Datei, um so zu lesen, und es funktioniert. Hacky aber funktioniert: 'self._element = selbst.client.put_feed (uri, ElementTree.tostring (feed) .replace (" & format "," & format "))' – steve

+0

Nizza. Ich frage mich, was dieses unescaped Ampersand dort überhaupt macht, da die Inhalte von 'feed' direkt aus der API von Google stammen. Wie auch immer, es ist gut, dass Sie eine Lösung gefunden haben. Wissen Sie, dass Sie Ihre eigenen Fragen zu StackOverflow beantworten können? – Burnash

Antwort

1

OK, also in meinem Fall stellte sich heraus, dass ein Unescaped-Ampersand an die Funktion modeles.resize() von gspread übergeben wurde. Ich weiß nicht, wie ich das entkofferte kaufmännische Und-Zeichen an seiner Quelle lösen soll, also habe ich es einfach durch die richtigen entflohenen Charaktere ersetzt und ich gehe in die Rennen.

Insbesondere I modifizierte models.py an Leitung 500 (in der Größe ändern() -Funktion) -

self._element = self.client.put_feed (uri, ElementTree.tostring (Feed) .replace (“& Format "," & Format "))

Verwandte Themen