2010-02-16 6 views
1

J'ai créé une application GAE qui analyse les flux RSS à l'aide de cElementTree. Les tests sur mon installation locale de GAE fonctionnent correctement. Lorsque j'ai téléchargé cette application et essayé de la tester, j'obtiens un SyntaxError.Erreur de syntaxe après le téléchargement de l'application GAE Python

L'erreur est:

Traceback (most recent call last): File "/base/python_lib/versions/1/google/appengine/ext/webapp/__init__.py", line 509, in __call__ 
handler.post(*groups) File "/base/data/home/apps/palmfeedparser/1-6.339910418736930444/pipes.py", line 285, in post 
tree = ET.parse(urlopen(URL)) File "<string>", line 45, in parse File "<string>", line 32, 
in parse SyntaxError: no element found: line 14039, column 45 

J'ai fait ce Mr.Alex Martelli suggéré et imprimer ce qui suit sur ma machine locale:

[ 
    '  <ac:tag><![CDATA[Mobilit\xc3\xa4t]]></ac:tag>\n', 
    '  </ac:tags>\n', 
    '  <ac:images>\n', 
    '  <ac:image ac:number="1">\n', 
    '  <ac:asset_url ac:type="app">http://cdn.downloads.example.com/public/1198/de/images/1/A/01.png</ac:asset_url>\n' 
] 

J'ai téléchargé l'application et imprimais:

[ 
    '  <ac:tag><![CDATA[Mobilit\xc3\xa4t]]></ac:tag>\n', 
    '  </ac:tags>\n', 
    '  <ac:images>\n', 
    '  <ac:image ac:number="1">\n', 
    '  <ac:asset_url ac:type="app">http://cdn.downloads.example.com/public/1198/de/images/1/A/01.png</ac:asset_url>\n' 
] 

Ces lignes correspondent aux lignes suivantes dans le flux RSS Je lis: 01 Je remarque qu'il y a un retour à la ligne avant la fermeture des balises ac :. La ligne 14039 correspond à cette nouvelle ligne.

Mise à jour:

J'utilise urllib.urlopen pour accéder à l'URL du flux. J'ai affiché le contenu qu'il récupère localement et sur GAE proprement dit. Localement, aucun contenu n'est tronqué. Test après le téléchargement de l'application, montre que le flux qui a 15289 lignes est tronqué à 14185 lignes.

Quelle méthode puis-je utiliser pour récupérer cet énorme flux? Urlfetch fonctionnerait-il?

Merci d'avance pour votre aide!

A_iyer

+0

Un contenu 14039-lignes pourrait peut-être être tronqué par effet de délai. Pour déboguer, au lieu d'appeler directement 'ET.parse', obtenez ces lignes liées à un nom,' xx = urlopen (URL) .readlines() ', puis utilisez par exemple. 'logging.info' pour montrer' repr (xx [14037: 14042]) '- un segment du contenu autour du problème que vous voyez. Que montre-t-il sur GAE proprement dit par rapport à votre installation locale du GAE SDK? Dites-nous (en éditant ce Q) et nous pouvons être en mesure d'aider. –

+0

Merci pour votre réponse rapide! J'ai édité la réponse comme vous l'avez mentionné. –

Répondre

0

Vous avez peut-être courir dans l'une des mystérieuses limites imposées à GAE.

Urlopen a été remplacé par google à sa méthode urlfetch, il ne devrait donc pas y avoir de différence. (bien qu'il puisse être utile d'essayer, il y a beaucoup de choses cachées dans GAE)

Les caractères de nouvelle ligne ne doivent pas affecter cElementTree.

Y a-t-il d'autres messages de journalisation dans vos journaux AppEngine? (Relatif à la demande d'urlopen?)

+0

Merci pour votre réponse Paul! J'ai essayé avec urlfetch et comme vous l'avez dit il n'y avait aucune différence. les caractères de nouvelle ligne n'affectaient pas cElementTree. Le flux est tronqué avec un caractère final qui provoque l'erreur. GAE n'affiche aucun message de journalisation autre que la syntaxe Error. Y a-t-il des façons de travailler pour empêcher la troncature dans GAE? –