Python CGI Script (с использованием XML и mindom) не может извлекать нулевые данные - PullRequest
2 голосов
/ 14 июля 2011

Эта часть кода анализирует XML для вывода на экран на веб-странице.

for counter in range(100):
    try:
        for item in BlekkoSearchResultsXML.getElementsByTagName('item'):
            Blekko_PageTitle = item.getElementsByTagName('title')[counter].firstChild.toxml(encoding="utf-8")
            Blekko_PageDesc = item.getElementsByTagName('description')[counter].firstChild.toxml(encoding="utf-8")
            Blekko_DisplayURL = item.getElementsByTagName('guid')[counter].firstChild.toxml(encoding="utf-8")
            Blekko_URL = item.getElementsByTagName('link')[counter].firstChild.toxml(encoding="utf-8")
            print "<h2>" + Blekko_PageTitle + "</h2>"
            print Blekko_PageDesc + "<br />"
            print Blekko_DisplayURL + "<br />"
            print Blekko_URL + "<br />"
    except IndexError:
        break

Однако сценарий завершается ошибкой, если он встречает набор нулевых тегов XML, т. Е. Если страница не имеет заголовка или описания страницы, с сообщением об ошибке:

AttributeError: 'NoneType' object has no attribute 'toxml' 
      args = ("'NoneType' object has no attribute 'toxml'",)

Фрагментанализируемого XML:

<item>
        <title>SUSHI FANLISTING</title>
        <link>http://sushi.perfectdrug.net/</link>
        <guid>http://sushi.perfectdrug.net/</guid>
        <description>This is the official...</description>
        </item>

Я безуспешно пытался использовать оператор try / Кроме того:

try:
    Blekko_PageTitle = item.getElementsByTagName('title')[counter].firstChild.toxml(encoding="utf-8")
except Blekko_PageTitle = None:
    Blekko_PageTitle = "No page title provided..."

Любые предложения приветствуются.

1 Ответ

0 голосов
/ 14 июля 2011

Вы делаете except неправильно: он ловит объекты исключений, которые поднимаются. Вы хотите

except AttributeError:

В качестве альтернативы используйте условное выражение:

if Blekko_PageTitle = None:
    ...
else:
    ...
...