2010-02-16 3 views
1

Я создал приложение GAE, которое анализирует RSS-каналы, используя cElementTree. Тестирование на моей локальной установке GAE отлично работает. Когда я загрузил это приложение и попытался его протестировать, я получил SyntaxError.Ошибка синтаксиса после загрузки приложения GAE Python

Ошибка:

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 

Я сделал то, что предложил Mr.Alex Мартелли и распечатаны следующие на моей локальной машине:

[ 
    '  <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' 
] 

Я загрузил приложение и оно распечатывается:

[ 
    '  <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' 
] 

Эти строки соответствуют следующим строкам в ленте RSS, которую я читаю:

<ac:tags> 
    <ac:tag><![CDATA[Mobilität]]></ac:tag> 

</ac:tags> 
<ac:images> 
    <ac:image ac:number="1"> 
    <ac:asset_url ac:type="app">http://cdn.downloads.example.com/public/1198/de/images/1/A/01.png</ac:asset_url> 

Я заметил, что перед закрывающимися тегами ac: есть новая строка. Строка 14039 соответствует этой новой строке.

Update:

Я использую urllib.urlopen, чтобы получить доступ к URL корма. Я отобразил содержимое, которое он извлекает как локально, так и в соответствии с GAE. Локально ни один контент не усекается. Тестирование после загрузки приложения показывает, что канал, который имеет 15289 строк, усечен до 14185 строк.

Какой метод я могу использовать для получения этого огромного фида? Работает ли urlfetch?

Заранее благодарим за вашу помощь!

A_iyer

+0

Возможно, содержимое 14039 строк может быть усечено эффектом таймаута. Чтобы отлаживать, вместо прямого вызова 'ET.parse', привяжите эти строки к имени,' xx = urlopen (URL) .readlines() ', затем используйте, например. 'logging.info', чтобы показать' repr (xx [14037: 14042]) '- сегмент содержимого вокруг проблемы, которую вы видите. Что он показывает на GAE, а также на локальную установку GAE SDK? Скажите нам (отредактировав это Q), и мы сможем помочь. –

+0

Спасибо за ваш быстрый ответ! Я отредактировал ответ, как вы уже упоминали. –

ответ

0

Вы, возможно, столкнетесь с одним из таинственных пределов, размещенных на GAE.

Urlopen был переопределен google в его метод urlfetch, поэтому в нем не должно быть никаких различий. (хотя, возможно, стоит попробовать, в GAE много скрытых вещей)

символы новой строки не должны влиять на cElementTree.

Проводятся ли какие-либо другие сообщения регистрации в ваших журналах AppEngine? (Относительно запроса urlopen?)

+0

Спасибо за ваш ответ Пол! Я попробовал с urlfetch, и, как вы сказали, нет никакой разницы. символы новой строки не повлияли на cElementTree. Коррекция усечена с помощью символа «конец», который вызывает ошибку. GAE не показывает никаких сообщений о регистрации, отличных от syntaxError. Существуют ли способы борьбы с усечением в GAE? –

Смежные вопросы