2010-02-07 2 views
0

Я использую BeautifulSoup для синтаксического анализа XML:Синтаксический XML с BeautifulSoup и обработки отсутствует элемент

xml = """<person> 
<first_name>Matt</first_name> 
</person>""" 

soup = BeautifulStoneSoup(xml) 
first_name = soup.find('first_name').string 
last_name = soup.find('last_name').string 

Но у меня есть проблема, когда нет last_name, потому что она задыхается. Иногда у корма есть это, а иногда и нет. Как я могу предотвратить его удушье?

Я не хочу использовать утверждения try/except. Я также не хочу использовать выражения if/else. (Поскольку у меня есть эти утверждения, он удваивает строки уже очень длинного кода).

Есть ли способ вернуть «Нет», если нет «last_name»?

ответ

4
last_name = soup.find('last_name') and soup.find('last_name').string 

Очень глупо, но это в равной степени удовлетворить ваши глупые заявил ограничение (не if). Немного менее глупо:

last_name_node = soup.find('last_name') 
last_name = last_name_node and last_name_node.string 

и:

last_name = getattr(soup.find('last_name'), 'string', None) 

Эти два не имеют те же накладные расходы, как и первый. Я думаю, что простой if более читабельен, чем любой из них.

+0

Я предпочитаю версию getattr вашего ответа, потому что я считаю, что именно то, что было создано вначале! –

+0

Читаем, но удваиваем строки :) Еще раз спасибо alex :) – TIMEX

+0

@alex: О, нет! В моих файлах исходного кода есть много символов перевода строки. Что бы я не сделал? – 2010-02-07 01:21:20

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